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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM