PyTorch之—卷积层、激活层、BN

版权声明:转载请说明来源,谢谢 https://blog.csdn.net/wsp_1138886114/article/details/86666135

一、卷积层

class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
二维卷积层,输入的尺度是(N, C_in,H,W),输出尺度( N,C_out,H_out,W_out)的计算方式:

o u t ( N i , C o u t j ) = b i a s ( C o u t j ) + k = 0 C i n 1 w e i g h t ( C o u t j , k ) i n p u t ( N i , k ) \rm out(N_i, C_{out_j})=bias(C_{out_j})+\sum^{C_{in}-1}_{k=0}weight(C{out_j},k)\bigotimes input(N_i,k)

参数:
in_channels(int) – 输入信号的通道
out_channels(int) – 卷积产生的通道
kerner_size(int or tuple) - 卷积核的尺寸
stride(int or tuple, optional) - 卷积步长
padding (int or tuple, optional)- 输入的每一条边补充0的层数
dilation(int or tuple, optional) – 卷积核元素之间的间距
groups(int, optional) – 从输入通道到输出通道的阻塞连接数
bias(bool, optional) - 如果bias=True,添加偏置
shape:
input: ( N , C i n , H i n , W i n ) (N,C_{in},H_{in},W_{in})
output: ( N , C o u t , H o u t , W o u t ) (N,C_{out},H_{out},W_{out})

H o u t = f l o o r ( ( H i n + 2 p a d d i n g [ 0 ] d i l a t i o n [ 0 ] ( k e r n e r l _ s i z e [ 0 ] 1 ) 1 ) / s t r i d e [ 0 ] + 1 ) \rm H_{out}=floor((H_{in}+2padding[0]-dilation[0](kernerl\_size[0]-1)-1)/stride[0]+1)

W o u t = f l o o r ( ( W i n + 2 p a d d i n g [ 1 ] d i l a t i o n [ 1 ] ( k e r n e r l _ s i z e [ 1 ] 1 ) 1 ) / s t r i d e [ 1 ] + 1 ) \rm W_{out}=floor((W_{in}+2padding[1]-dilation[1](kernerl\_size[1]-1)-1)/stride[1]+1)

变量:
weight(tensor) - 卷积的权重,大小是(out_channels, in_channels,kernel_size)
bias(tensor) - 卷积的偏置系数,大小是(out_channel)

二、池化层

class torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)

对于输入信号的输入通道,提供2维最大池化(max pooling)操作

如果输入的大小是(N,C,H,W),那么输出的大小是(N,C,H_out,W_out)和池化窗口大小(kH,kW)的关系是:
o u t ( N i , C j , k ) = m a x m = 0 k H 1 m a x m = 0 k W 1 i n p u t ( N i , C j , s t r i d e [ 0 ] h + m , s t r i d e [ 1 ] w + n ) \rm out(N_i, C_j,k)=max^{kH-1}_{m=0}max^{kW-1}_{m=0}input(N_{i},C_j,stride[0]h+m,stride[1]w+n)

如果padding不是0,会在输入的每一边添加相应数目的0
dilation用于控制内核点之间的距离。

参数:

kernel_size(int or tuple) - max pooling的窗口大小
stride(int or tuple, optional) - max pooling的窗口移动的步长。默认值是kernel_size
padding(int or tuple, optional)- 输入的每一条边补充0的层数
dilation(int or tuple, optional) – 一个控制窗口中元素步幅的参数
return_indices - 如果等于True,会返回输出最大值的序号,对于上采样操作会有帮助
ceil_mode - 如果等于True,计算输出信号大小的时候,会使用向上取整,代替默认的向下取整的操作

shape:

输入: ( N , C , H i n , W i n ) (N,C,H_{in},W_{in})
输出: ( N , C , H o u t , W o u t ) (N,C,H_{out},W_{out})

H o u t = f l o o r ( ( H i n + 2 p a d d i n g [ 0 ] d i l a t i o n [ 0 ] ( k e r n e l _ s i z e [ 0 ] 1 ) 1 ) / s t r i d e [ 0 ] + 1 \rm H_{out}=floor((H_{in} + 2padding[0] - dilation[0](kernel\_size[0] - 1) - 1)/stride[0] + 1

W o u t = f l o o r ( ( W i n + 2 p a d d i n g [ 1 ] d i l a t i o n [ 1 ] ( k e r n e l _ s i z e [ 1 ] 1 ) 1 ) / s t r i d e [ 1 ] + 1 \rm W_{out}=floor((W_{in} + 2padding[1] - dilation[1](kernel\_size[1] - 1) - 1)/stride[1] + 1

三、归一化(BN)

class torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True)

对小批量(mini-batch)3d数据组成的4d输入进行批标准化(Batch Normalization)操作

y = γ x m e a n [ x ] V a r [ x ] + ϵ + β y=\gamma *\frac{x−mean[x]}{\sqrt{Var[x]}+ϵ}+\beta

在每一个小批量(mini-batch)数据中,计算输入各个维度的均值和标准差。gamma与beta是可学习的大小为C的参数向量(C为输入大小)

在训练时,该层计算每次输入的均值与方差,并进行移动平均。移动平均默认的动量值为0.1。
在验证时,训练求得的均值/方差将用于标准化验证数据。

参数:

num_features: 来自期望输入的特征数,该期望输入的大小为 batch_size x num_features x height x width
eps: 为保证数值稳定性(分母不能趋近或取0),给分母加上的值。默认为1e-5。
momentum: 动态均值和动态方差所使用的动量。默认为0.1。
affine: 一个布尔值,当设为true,给该层添加可学习的仿射变换参数。
Shape:- 输入输出相同(N, C,H, W)

例子

m = nn.BatchNorm2d(100)                  # With Learnable Parameters
m = nn.BatchNorm2d(100, affine=False)    # Without Learnable Parameters

input = autograd.Variable(torch.randn(20, 100, 35, 45))
output = m(input)

猜你喜欢

转载自blog.csdn.net/wsp_1138886114/article/details/86666135
今日推荐