主要是參考這里,寫的很好PyTorch 入門實戰(四)——利用Torch.nn構建卷積神經網絡
- 卷積層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).
- 池化層
最大值池化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層,甚至可以在多個卷積操作后添加池化操作
-
批標准化層nn.BatchNorm2d()
-
激活函數nn.ReLU()