模型创建步骤
两要素:
构建子模块
init()
拼接子模块
forward()
nn.Module
nn.Module
parameters : 存储管理 nn.Parameter 类
modules : 存储管理 nn.Module 类
buffers :存储管理缓冲属性,如 BN 层中的 running_mean
总结
一个 module 可以包含多个子 module
一个 module 相当于一个运算,必须实现 forward() 函数
每个 module 都有 8 个字典管理它的属性
模型容器 Containers
Sequential
nn.Sequential是 nn.module 的容器,用于 按顺序 包装一组网络层
顺序性 :各网络层之间严格按照顺序构建
自带 forward()forward():自带的 forward 里,通过 for 循环依次执行前向传播运算
ModuleList
nn.ModuleList
append() 在 ModuleList 后面 添加 网络层
extend():拼接 两个 ModuleList
insert() 指定在 ModuleList 中位置 插入 网络层
ModuleLDict
nn.ModuleDict
是 nn.module 的容器,用于包装一组网络层,以 索引 方式调用网络层
主要方法:
clear() 清空 ModuleDict
items() 返回可迭代的键值对 (key value pairs)
keys() 返回字典的键 (key)
values() 返回字典的值 (values)
pop() 返回一对键值,并从字典中删除
总结
nn.Sequential 顺序性 ,各网络层之间严格按顺序执行,常用于 block 构建
nn.ModuleList 迭代性 ,常用于大量重复网构建,通过 for 循环实现重复构建
nn.ModuleDict 索引性 ,常用于可选择的网络层
卷积层
nn.Conv2d
功能:对多个二维信号进行二维卷积
主要参数:
in_channels :输入通道数
out_channels :输出通道数,等价于卷积核个数
kernel_size :卷积核尺寸
stride :步长
padding :填充个数
dilation :空洞卷积大小 (用于增大感受野
groups :分组卷积设置( 模型压缩
bias :偏置
卷积维度:一般情况下 ,卷积核在几个维度上滑动,就是几维卷积
转置卷积
转置卷积又称为反卷积Deconvolution 和部分跨越卷积 Fractionallystrided Convolution ) 用于 对图像进行上采样 UpSample
池化层
池化运算:对信号进行收集 ”并 总结 ”,类似水池收集水资源,因而得名池化层
nn.MaxPool2d
功能:对二维信号(图像)进行最大值池化
主要参数:
kernel_size :池化核尺寸
stride :步长
padding :填充个数
dilation :池化核间隔大小
ceil_mode :尺寸向上取整
return_indices :记录池化像素索引
nn.AvgPool2d
功能:对二维信号(图像)进行平均值池化
主要参数:
kernel_size :池化核尺寸
stride :步长
padding :填充个数
ceil_mode :尺寸向上取整
count_include_pad :填充值用
nn.MaxUnpool2d
功能:对二维信号(图像)进行最大值池化上采样
主要参数:
kernel_size :池化核尺寸
stride :步长
padding :填充个数
激活函数层
激活函数对特征进行非线性变换,赋予多层神经网络具有深度 的意义
nn.Sigmoid
特性:
输出值在 ( 0,1),符合概率
导数范围是 [0, 0.25)易导致梯度消失
输出为非 0 均值,破坏数据分布
nn.tanh
特性:
输出值在 (-1,1),数据符合 0 均值
导数范围是 (0,1) 易导致梯度消失
nn.ReLU
特性:
输出值均为正数,负半轴导致死神经元
导数是 1, 缓解梯度消失,但易引发梯度爆炸
nn.LeakyReLU
negative_slope : 负半轴斜率
nn.PReLU
init : 可学习斜率
nn.RReLU
lower : 均匀分布下限
特性:
输出值均为正数,负半轴导致死神经元
导数是 1, 缓解梯度消失,但易引发梯度爆炸
nn.LeakyReLU
negative_slope : 负半轴斜率
nn.PReLU
init : 可学习斜率
nn.RReLU
lower : 均匀分布下限
upper 均匀分布上限