torch.nn

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:

一、卷积神经网络常见的层:

torch.nn_第1张图片

二、pytorch中各种层的用法

1. Convolution layers卷积层:

参考:https://pytorch.org/docs/stable/_modules/torch/nn/modules/conv.html#Conv1d

torch.nn_第2张图片

1)Conv2d

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参数的作用
  1. group=1,输出是所有的输入的卷积;
  2. group=2,此时相当于有并排的两个卷积层,每个卷积层计算输入通道的一半,并且产生的输出是输出通道的一半,随后将这两个输出连接起来得到结果; 
  3. group=in_channels,每一个输入通道和它对应的卷积核进行卷积,该对应的卷积核大小为
  • 参数kernel_sizestride,paddingdilation:
  1. 也可以是一个int的数据,此时卷积height和width值相同;
  2. 也可以是一个tuple数组,tuple的第一维度表示height的数值,tuple的第二维度表示width的数值,当是数组时,计算时height使用索引为0的值,width使用索引为1的值

参数:

  • in_channels(int) – 输入信号的通道
  • out_channels(int) – 卷积产生的通道
  • kerner_size(int or tuple) - 卷积核的尺寸
  • stride(int or tupleoptional) - 卷积步长,默认为1
  • padding(int or tupleoptional) - 输入的每一条边补充0的层数,默认为0
  • dilation(int or tupleoptional) – 卷积核元素之间的间距,默认为1
  • groups(intoptional) – 从输入通道到输出通道的阻塞连接数。默认为1
  • bias(booloptional) - 如果bias=True,添加可学习的偏置到输出中

2)ConvTranspose2d

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_sizestridepaddingdilation数据类型:

  • 可以是一个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的说明。

参数:

  • in_channels(int) – 输入信号的通道数
  • out_channels(int) – 卷积产生的通道数
  • kerner_size(int or tuple) - 卷积核的大小
  • stride(int or tuple,optional) - 卷积步长
  • padding(int or tupleoptional) - 输入的每一条边补充padding= kernel - 1 - padding,即(kernel_size - 1)/2个0的层数,所以补充完高宽都增加(kernel_size - 1)
  • output_padding(int or tupleoptional) - 在输出的每一个维度的一边补充0的层数,所以补充完高宽都增加padding,而不是2*padding,因为只补一边
  • dilation(int or tupleoptional) – 卷积核元素之间的间距
  • groups(intoptional) – 从输入通道到输出通道的阻塞连接数
  • bias(booloptional) - 如果bias=True,添加偏置

2. Normalization layers归一化(标准化)层: 

InstanceNorm1d

InstanceNorm2d

InstanceNorm3d

 

3. Non-linear activations(weighted sum, nonlinearity)非线性激活层(加权和,非线性):

1)ReLU:

class torch.nn.ReLU(inplace=False)

对输入运用修正线性单元函数:

{ReLU}(x)= max(0, x)

图为:

torch.nn_第3张图片

参数: inplace-选择是否进行原位运算,即x= x+1

shape:

  • 输入:(N,*), *代表任意数目附加维度
  • 输出:(N,*),与输入拥有同样的形状

 

你可能感兴趣的:(论文学习)