2 卷積、池化、BN及Dropout解讀


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


免責聲明!

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



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