1. 模型创建步骤
2. 模型相关——torch.nn
2.1 nn.Parameter
- 张量的子类,表示可学习的参数,如weight,bias
2.2 nn.Module
- 所以网络层的基类,管理网络属性
- 属性:
- parameters:存储管理nn.Parameter类
- modules:存储管理nn.Module类
- buffers:存储管理缓冲属性,如BatchNorm中的running_mean
- ***_hooks:存储管理钩子函数
2.3 nn.functional
- 函数具体实现,如卷积,池化,激活函数等
2.4 nn.init
- 参数初始化方法
3. 容器
3.1 nn.Sequential
- 按顺序包装多个网络层,个人而言,用的最多
3.2 nn.ModuleList
- 像python的list一样,包装多个网络层
3.3 nn.ModuleDict
- 像python的dict一样包装多个网络层
4. 网络层
4.1 卷积层
4.1.1 1d/2d/3d 卷积
- 卷积维度
一般情况下,卷积核在几个维度上滑动,就是几维卷积
4.1.2 nn.Conv2d
- 二维卷积
nn.Conv2d(in_channels, out_channels, kernel_size, stride=1,
padding=0, dilation=1, groups=1, bias=True, padding_mode="zeros")
- in_channels:输入通道数
- out_channels:输出通道数,等于卷积核的个数
- kernel_size:卷积核尺寸
- stride:步长
- padding:填充个数
- dilation:空洞卷积大小,图像分割用
- groups:分组卷积设置,可能和GoogLeNet的inception模块有关
- bias:是否使用偏置
- padding_mode:填充模式
4.1.3 nn.ConvTranspose2d
- 所谓的转置卷积,用于上采样
nn.ConvTranspose2d(in_channels, out_channels, kernel_size,
stride=1, padding=0, output_padding=0, groups=1,
bias=True, dilation=1, padding_mode="zeros")
4.2 池化层
- 分为Maxpooling和AveragePooling,以二维池化为例
4.2.1 nn.MaxPool2d
nn.MaxPool2d(kernel_size, stride=Node, padding=0, dilation=1,
return_indices=False, ceil_mode=False)
- kernel_size:池化核尺寸
- stride:步长
- padding:填充
- dilation:池化间隔大小,类似空洞卷积时的参数
- return_indices:记录池化像素索引
- ceil_mode:尺寸向上取整
4.2.2 nn.AvgPool2d
nn.AvgPool2d(kernel_size, stride=Node, padding=0, ceil_mode=False,
count_include_pad=True, divisor_override=None)
- kernel_size:池化核尺寸
- stride:步长
- padding:填充
- ceil_mode:尺寸向上取整数
- count_include_pad:填充值用于计算
- divisor_override:除法因子
4.2.3 nn.MaxUnpool2d
- 对二维信号进行最大值池化上采样
nn.MaxUnpool2d(kernel_size, stride=Node, padding=0)
- kernel_size:池化核尺寸
- stride:步长
- padding:填充
4.3 线性层
线性层又称全连接层,其每个神经元与上一层所有神经元相连,实现对前一层的线性组合,线性变换
nn.Linear(in_features, out_features, bias=True)
- in_features:输入结点数
- out_features:输出结点数
- bias:是否需要偏置
4.4 激活函数
4.4.1 nn.Sigmoid
- 输出 ( 0 , 1 ) (0,1) (0,1)
4.4.2 nn.tanh
- 输出 ( − 1 , 1 ) (-1,1) (−1,1)
4.4.3 nn.ReLU
-
Rectified Linear Unit
-
y = m a x { 0 , x } y=max\{0,x\} y=max{0,x}
4.4.4 nn.LeakyReLU
- y = { a x , x } y=\{ax,x\} y={ax,x}
- 斜率a作为函数的参数,一般0.1或0.01
4.4.5 nn.PReLU
- 小于零时有个初始斜率,随着迭代会不断学习更新
- 函数有个参数init
4.4.6 nn.RReLU
- 小于零是斜率是均匀分布中随机取的
- 该方法有2个参数
- lower:均匀分布下限
- upper:均匀分布上限