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

posted @ 2021-10-03 17:58  SethDeng  阅读(567)  评论(0编辑  收藏  举报