https://pytorch.org/docs/master/nn.html 官方文档
https://pytorch.org/tutorials/beginner/nn_tutorial.html 官方文档:WHAT IS TORCH.NN REALLY?
https://www.jianshu.com/p/343e1d994c39 pytorch学习(九)—基本的层layers
https://www.cnblogs.com/wanghui-garcia/p/10775859.html pytorch中文文档-torch.nn常用函数-待添加
https://blog.csdn.net/weixin_36811328/article/details/87905208 深入理解 TORCH.NN
https://zhuanlan.zhihu.com/p/62768077 快速入门torch.nn(一)
一、卷积神经网络常见的层:
二、pytorch中各种层的用法
1. Convolution layers卷积层:
1)Conv2d
2)ConvTranspose2d
2. Normalization layers归一化(标准化)层:
3. Non-linear activations(weighted sum, nonlinearity)非线性激活层(加权和,非线性):
1)ReLU:
参考:https://pytorch.org/docs/stable/_modules/torch/nn/modules/conv.html#Conv1d
class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
二维卷积层, 输入的尺度是(N, Cin,H,W),输出尺度(N,Cout,Hout,Wout)的计算方式:
说明:
stride
: 控制相关系数的计算步长 dilation
: 用于控制内核点之间的距离;可见pytorch的函数中的dilation参数的作用groups
: 控制输入和输出之间的连接:可见pytorch的函数中的group参数的作用group=1
,输出是所有的输入的卷积;group=2
,此时相当于有并排的两个卷积层,每个卷积层计算输入通道的一半,并且产生的输出是输出通道的一半,随后将这两个输出连接起来得到结果; group=
in_channels,每一个输入通道和它对应的卷积核进行卷积,该对应的卷积核大小为kernel_size
,stride,padding
,dilation:
int
的数据,此时卷积height和width值相同;tuple
数组,tuple
的第一维度表示height的数值,tuple的第二维度表示width的数值,当是数组时,计算时height使用索引为0的值,width使用索引为1的值参数:
int
) – 输入信号的通道int
) – 卷积产生的通道int
or tuple
) - 卷积核的尺寸int
or tuple
, optional
) - 卷积步长,默认为1int
or tuple
, optional
) - 输入的每一条边补充0的层数,默认为0int
or tuple
, optional
) – 卷积核元素之间的间距,默认为1int
, optional
) – 从输入通道到输出通道的阻塞连接数。默认为1bool
, optional
) - 如果bias=True
,添加可学习的偏置到输出中class torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1)
对由多个输入平面组成的输入图像应用二维转置卷积操作。
这个模块可以看作是Conv2d相对于其输入的梯度。它也被称为微步卷积(fractionally-strided convolutions)或解卷积(deconvolutions,尽管它不是一个实际的解卷积操作)。
说明:
stride
: 控制相关系数的计算步长 dilation
: 用于控制内核点之间的距离groups
: 控制输入和输出之间的连接:
group=1
,输出是所有的输入的卷积;group=2
,此时相当于有并排的两个卷积层,每个卷积层计算输入通道的一半,并且产生的输出是输出通道的一半,随后将这两个输出连接起来。 参数kernel_size
,stride
,padding
,dilation
数据类型:
int
类型的数据,此时卷积height和width值相同;tuple
数组(包含来两个int
类型的数据),第一个int
数据表示height
的数值,第二个int
类型的数据表示width的数值注意:
由于内核的大小,输入的最后的一些列的数据可能会丢失。因为输入和输出不是完全的互相关。因此,用户可以进行适当的填充(padding
操作)。
padding参数有效地将 (kernel_size - 1)/2 数量的零添加到输入大小。这样设置这个参数是为了使Conv2d和ConvTranspose2d在初始化时具有相同的参数,而在输入和输出形状方面互为倒数。然而,当stride > 1时,Conv2d将多个输入形状映射到相同的输出形状。output_padding通过在一边有效地增加计算出的输出形状来解决这种模糊性。
注意,output_padding只用于查找输出形状,但实际上并不向输出添加零填充。
output_padding的作用:可见nn.ConvTranspose2d的参数output_padding的作用
在某些情况下,当使用CUDA后端与CuDNN,该操作可能选择一个不确定性算法,以提高性能。如果不希望出现这种情况,可以通过设置torch.backends.cudnn.deterministic = True使操作具有确定性(可能要付出性能代价)。有关背景资料,请参阅有关 Reproducibility的说明。
参数:
int
) – 输入信号的通道数int
) – 卷积产生的通道数int
or tuple
) - 卷积核的大小int
or tuple
,optional
) - 卷积步长int
or tuple
, optional
) - 输入的每一条边补充padding= kernel - 1 - padding,即(kernel_size - 1)/2个0的层数,所以补充完高宽都增加(kernel_size - 1)int
or tuple
, optional
) - 在输出的每一个维度的一边补充0的层数,所以补充完高宽都增加padding,而不是2*padding,因为只补一边int
or tuple
, optional
) – 卷积核元素之间的间距int
, optional
) – 从输入通道到输出通道的阻塞连接数bool
, optional
) - 如果bias=True
,添加偏置InstanceNorm1d
InstanceNorm2d
InstanceNorm3d
class torch.nn.ReLU(inplace=False)
对输入运用修正线性单元函数:
{ReLU}(x)= max(0, x)
图为:
参数: inplace-选择是否进行原位运算,即x= x+1
shape: