Pytorch学习笔记-03 模型创建
文章目录
模型创建步骤
两要素:
构建子模块
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 :填充值用于计算
- divisor_override :除法因子
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 均匀分布上限