pytorch学习(六)---搭建简单的神经网络以及sequential的使用

        本篇自学笔记来自于b站《PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】》,Up主讲的非常通俗易懂,文章下方有视频连接,如有需要可移步up主讲解视频,如有侵权,实非故意,深表歉意,请与我联系,删除相关内容!

        本节以CIFAR10的模型结果(如下图)为例,搭建该简易的神经网络。pytorch学习(六)---搭建简单的神经网络以及sequential的使用_第1张图片

         首先需要知道某一个尺寸的图片经过卷积之后的尺寸如何计算。

pytorch学习(六)---搭建简单的神经网络以及sequential的使用_第2张图片

        知道怎么计算之后,看模型图输入为32*32,经过一个5*5卷积核卷积之后,图片的尺寸依旧是32*32,通过上述公式,W1=32,F=5,S一般设为1,且要求W2=32,经过计算得到P=2,所以在进卷积时需要设置padding为2.

具体代码如下,注释的部分是按照之前的方式写的,没注释的部分是使用sequential写的,相当于将这些操作打包,在forward部分直接调用sequential定义好的模型即可。还跟着up学到了tensorboard可以显示计算图,即代码最下面的add_graph(),参数需要给所用的模型和输入。

#展示搭建一个简单的神经网络,以cifar10的网络结构为例,并展示sequential的用法
import torch
import torchvision
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter


class Model(nn.Module):

    def __init__(self):
        super().__init__()
        # self.conv1 = nn.Conv2d(in_channels=3,out_channels=32,kernel_size=5,padding=2)
        # self.max_pooling1 = nn.MaxPool2d(kernel_size=2)
        # self.conv2 = nn.Conv2d(in_channels=32,out_channels=32,kernel_size=5,padding=2)
        # self.max_pooling2 = nn.MaxPool2d(kernel_size=2)
        # self.conv3 = nn.Conv2d(in_channels=32,out_channels=64,kernel_size=5,padding=2)
        # self.max_pooling3 = nn.MaxPool2d(kernel_size=2)
        # self.flatten = nn.Flatten()
        # self.linear1 = nn.Linear(in_features=1024,out_features=64)
        # self.linear2 = nn.Linear(in_features=64, out_features=10)

        self.model = nn.Sequential(
            nn.Conv2d(in_channels=3, out_channels=32, kernel_size=5, padding=2),
            nn.MaxPool2d(kernel_size=2),
            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=5, padding=2),
            nn.MaxPool2d(kernel_size=2),
            nn.Conv2d(in_channels=32, out_channels=64, kernel_size=5, padding=2),
            nn.MaxPool2d(kernel_size=2),
            nn.Flatten(),
            nn.Linear(in_features=1024, out_features=64),
            nn.Linear(in_features=64, out_features=10),
        )
    def forward(self,x):
        # output = self.conv1(x)
        # output = self.max_pooling1(output)
        # output = self.conv2(output)
        # output = self.max_pooling2(output)
        # output = self.conv3(output)
        # output = self.max_pooling3(output)
        # output = self.flatten(output)
        # output = self.linear1(output)
        # output = self.linear2(output)

        output = self.model(x)
        return output

model = Model()
input = torch.ones((64,3,32,32))
output = model(input)
print(output.shape)
writer = SummaryWriter("logs")
writer.add_graph(model,input)
writer.close()

展示的计算图如图:

pytorch学习(六)---搭建简单的神经网络以及sequential的使用_第3张图片 

附视频地址: PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】_哔哩哔哩_bilibili

你可能感兴趣的:(pytorch,学习笔记,pytorch,python,深度学习)