二、torch.nn库
2.1 模块容器——nn.Sequential()
含义:一个搭建网络模型构架的有序容器 ,按照传入顺序添加到容器中 作用:将网络封装成一个整体,自定义自己的网络层 用法:前向传播时调用forward()方法,模型接收的输入首先被传入nn.Sequential()包含的第一个网络模块中。按照顺序依次计算并传播,直到nn.Sequential()里的最后一个模块输出结果。 官网例子:
model = nn. Sequential(
nn. Conv2d( 1 , 20 , 5 ) ,
nn. ReLU( ) ,
nn. Conv2d( 20 , 64 , 5 ) ,
nn. ReLU( )
)
2.2 二维卷积——nn.Conv2d()
作用:对由多个输入平面组成的输入信号进行二维卷积 参数:
torch. nn. Conv2d( in_channels, out_channels, kernel_size, stride= 1 , padding= 0 , dilation= 1 , groups= 1 , bias= True )
参数名 作用 in_channels 输入图像通道数 out_channels 卷积产生的通道数 kernel_size 卷积核尺寸,可以设为1个int型数或者一个(int, int)型的元组。例如(2,3)是高2宽3卷积核 stride 卷积步长,默认为1。可以设为1个int型数或者一个(int, int)型的元组。 padding 填充操作,控制padding_mode的数目。 padding_mode padding模式,默认为Zero-padding dilation 扩张操作:控制kernel点(卷积核点)的间距,默认值:1。 groups group参数的作用是控制分组卷积,默认不分组,为1组。 bias 为真,则在输出中添加一个可学习的偏差。默认:True。
2.3 批量标准化——nn.BatchNorm2d()
参考引用1:详细解读nn.BatchNorm2d——批量标准化操作 参考引用2:nn.BatchNorm2d——批量标准化操作解读
作用: 对于所有的batch中样本的同一个channel的数据元素进行标准化处理 算法: 不同阶段的用法:
训练阶段 具体方法 训练阶段 均值和方差计算方法相同,将所有batch相同通道的值取出来,一块计算均值和方差 测试阶段 方法1:做全局计算;每标准化一组数据,都利用计算得到的局部观测值的均值和方差对储存的数据做更新 测试阶段 方法2:只计算当前输入数据的均值和方差
参数:
BatchNorm2d( num_features, eps= 1e-05 , momentum= 0.1 , affine= True , track_running_stats= True )
参数名 含义 num_features 输入图像的通道数量 eps 稳定系数,防止分母出现0 momentum 模型均值和方差更新时的参数 affine gamma,beta是否可学。如果设为True,参数通过学习得到;如果设为False,参数是固定值,默认gamma是1,beta是0 track_running_stats 代表训练阶段是否更新模型存储的均值和方差,即测试阶段的均值与方差的计算方法采用第一种方法还是第二种方法,true是方法1;false是方法2
引入BN层的意义: 1)加快网络模型的收敛速度 2)遇到梯度消失或者梯度爆炸的问题 3)加快网络的训练速度
2.4 最大池化层——MaxPool2d()
作用:对窗口大小内的特征取最大,减小卷积层参数误差造成估计均值的偏移的误差,更多的保留纹理信息 2. 参数:
MaxPool2d( kernel_size, stride= 2 , padding)
参数名 含义 kernel_size 窗口大小 stride 窗口移动的步长,默认值是kernel_size padding 边缘填充
2.5 上采样——nn.Upsample()
主要参数:
torch. nn. Upsample( size= None , scale_factor= None , mode= 'nearest' )
参数 含义 size 据不同的输入制定输出大小 scale_factor 指定输出为输入的多少倍数 mode 可使用的上采样算法,有nearest,linear,bilinear,bicubic 和 trilinear;默认使用nearest
2.6 转置卷积上采样——nn.ConvTranspose2d()
参考:反卷积通俗详细解析与nn.ConvTranspose2d重要参数解释
待解决的问题记录:
文献中描述的上采样,使用的是转置卷积;
实际的项目代码中,上采样增加了双线性插值的分支,不理解双线性插值与转置卷积在上采样的区别
三、torch.Tensor
仅作整理,参考:【PyTorch系例】torch.Tensor详解和常用操作
3.1 定义
torch.Tensor是深度学习中存储和变换数据的主要工具,与Numpy的多维数组非常相似
3.2 创建
根据数据创建
x = torch. tensor( [ 5.5 , 3 ] )
四、torch.cat
定义:将两个张量(tensor)拼接在一起,cat是concatenate的意思,即拼接。 参数:
import torch
x= torch. cat( [ x1, x2] , dim= )
1)dim=0:按行拼接,x1在上,x2在下 2)dim=1:按列拼接,x1在左,x2在右
五、关于 def forward() 的调用
定义:在建立模型后,进行神经元网络的前向传播 规则:当类中有多种方法,但直接通过“对象名(参数)”调用时,pytorch对forword方法赋予了方法名缺省时的优先调用 ;即,在pytorch下,调用forward方法时,可以不写.forward()。 例子: 直接通过“对象名(参数)”调用,默认调用forward方法
import torch. nn as nn
class test ( nn. Module) :
def __init__ ( self, x) :
super ( test, self) . __init__( )
self. x= x
def forward ( self, y) :
return self. x* y
def name ( self, z) :
return self. x+ z
if __name__ == "__main__" :
Test= test( 2 )
print ( Test( 3 ) )
运行结果: