pytorch中torch.nn构建神经网络的不同层的含义

主要是参考这里,写的很好PyTorch 入门实战(四)——利用Torch.nn构建卷积神经网络

  1. 卷积层nn.Con2d()

    常用参数

  • in_channels:输入通道数
  • out_channels:输出通道数
  • kernel_size:滤波器(卷积核)大小,宽和高相等的卷积核可以用一个数字表示,例如kernel_size=3;否则用不同数字表示,例如kernel_size=(5,3)
  • stride : 表示滤波器滑动的步长
  • padding:是否进行零填充,padding=0表示四周不进行零填充,padding=1表示四周进行1个像素点的零填充
  • bias:默认为True,表示使用偏置

举个例子,构建一个输入通道为3,输出通道为64,卷积核大小为3x3,四周进行1个像素点的零填充的conv1层:

class testNet(nn.Module):
    def __init__(self, num_classes=10):
        super(testNet, self).__init__()
        #定义自己的网络
        self.conv1 = nn.Conv2d(3,64,kernel_size=3,padding=1)
 
    def forward(self,x):
        #定义自己的前向传播方式
        out = self.conv1(x)
        return out

这里卷积层的输入维度应该是 (Batch, Number Channels, height, width).

  1. 池化层

    最大值池化nn.MaxPool2d()和均值池化nn.AvgPool2d()

    常用参数

    kernel_size、stride、padding在卷积层部分定义和这里一样

举个例子,构建一个卷积核大小为2x2,步长为2的pool1层,并且加入到forward中:

class testNet(nn.Module):
    def __init__(self, num_classes=10):
        super(testNet, self).__init__()
        #定义自己的网络
        self.conv1 = nn.Conv2d(3,64,kernel_size=3,padding=1)
        self.pool1 = nn.MaxPool2d(kernel_size=2,stride=2)
 
    def forward(self,x):
        #定义自己的前向传播方式
        out = self.conv1(x)
        out = self.pool1(out)
        return out

事实上,池化层可以不必紧跟在卷积层之后,中间可以加入激活层和BatchNorm层,甚至可以在多个卷积操作后添加池化操作

  1. 批标准化层nn.BatchNorm2d()

  2. 激活函数nn.ReLU()