nn.Conv2d() & nn.Max_pool2d() & nn.BatchNorm2d()& nn.Dropout2d()
nn.Conv2d():
一個二維卷積層的輸入張量為(\(N, C_{in}, H, W\)),輸出為 (\(N, C_{out}, H, W\)),分別為:批數據量、通道數、圖片高、圖片寬
torch.nn.Conv2d(
in_channels, # 輸入的通道數目 【必填】
out_channels, # 輸出的通道數目,也是卷積操作中卷積核 filter 的數量 【必填】
kernel_size, # 卷積核的大小,當卷積是方形的時候,只需要一個整數邊長即可,不是方形,要輸入一個元組表示高和寬。【必填】
stride=1, # 卷積每次滑動的步長為多少,默認是 1
padding=0, # 填充操作,控制 padding_mode 的數目。默認的話就是在 feature map 外圍增加 n 圈0
dilation=1, # 控制卷積核之間的間距,即卷積核在feature map上 插空 進行像素抽取
groups=1, # 將輸入和輸出分為多少組,組之間各自進行運算
bias=True, # 后接BN則不需要bias,bias = False
padding_mode=‘zeros’) # padding 模式,默認為 填充 0 。
注:我們在使用 nn.Conv() 的過程中,只定義卷積的數目及大小,並不定義卷積核里面的參數,一開始是隨機數,它本身是需要訓練的權重值。它會隨着網絡的訓練,逐漸發生變化,最后生成固定的權重值。
nn.Max_pool2d():
torch.nn.MaxPool2d(
kernel_size, # 表示做最大池化的窗口大小,可以是單個值,也可以是tuple元組 【必填】
stride=None, # 步長,可以是單個值,也可以是tuple元組,在不設置的情況下等於kernel_size
padding=0, # 填充,可以是單個值,也可以是tuple元組
dilation=1, # 控制窗口中元素步幅
return_indices=False, # 布爾類型,返回最大值位置索引(有啥用,不太了解)
ceil_mode=False) # 計算輸出形狀,默認是向下取整,為True,用向上取整的方法
nn.max_pool2d() 與 F.max_pool2d() 間的差異:
本質上是相同的,不同之處在於 torch.nn.MaxPool2d 是一個顯式的 nn.Module,它調用 torch.nn.functional.max_pool2d() 來定義它自己的 forward() 方法。
def forward(self, input):
return F.max_pool2d(input, self.kernel_size, self.stride,
self.padding, self.dilation, self.ceil_mode,
self.return_indices)
nn.BatchNorm2d():
正則化公式:

torch.nn.BatchNorm2d(
num_features, # 通道 channel 數 【必填】
eps=1e-05, # 為分數值穩定而添加到分母的值。 默認值:1e-5
momentum=0.1, # 一個用於運行過程中均值和方差的一個估計參數。
affine=True, # 此模塊具有可學習的仿射參數。γ(gamma) 和 β(beta) (可學習的仿射變換參數) 默認值:True
track_running_stats=True, # 當設置為True時,此模塊跟蹤運行平均值和方差;設置為False時,此模塊不跟蹤此類統計信息,並將統計信息緩沖區running_mean和running_var初始化為None。
device=None, # 沒找到定義?
dtype=None) # 沒找到定義?
注:Batch Normalization 強行將數據拉回到均值為0,方差為1的正態分布上,一方面使得數據分布一致,另一方面避免梯度消失。
nn.Dropout2d():
torch.nn.Dropout2d(
p=0.5, # p 定義了元素歸零的概率 【必填】
inplace=False) # 如果設置為 True ,將對 tensor 執行歸零操作,而默認值不會修改tensor
