一、网络模型创建步骤
数据->模型->损失函数->优化器
1、模型创建
(1)构建子模块->卷积层,池化层,激活函数层
(2)拼接子模块->LeNet,AlexNet,ResNet等
2、权值初始化->Xavier,Kaiming,均匀分布,正态分布
二、nn.Module属性
- torch.nn
- nn.Parameter 张量子类,表示可学习参数,如weight,bias
- nn.Module 所有网络层基类,管理网络属性
- nn.functional 函数具体实现,如卷积,池化,激活函数等
- nn.init 参数初始化方法
- nn.Module
- parameters:存储管理nn.Parameter类
- modules:存储管理nn.Moudle类
- buffer:存储管理缓冲属性,如BN层中的running_mean
- ***_hooks:存储管理钩子函数
- nn.Module总结
- 一个module可以包含多个子module
- 一个module相当于一个运算,必须事先forward()函数
- 每个module都有8个字典管理它的属性
三、模型容器Containers
三个常用容器:
- nn.Sequetial -->按顺序包装多个网络层
- nn.ModuleList-->像python的list一样包装多个网络层
- nn.ModuleDict-->像python的dict一样包装多个网络层 加上名称
1、nn.Sequential是nn.module的容器,用于按顺序包装一组网络层
-
- 顺序性:各网络层之间严格按照顺序构建
- 自带forward():自带的forward里,通过for循环依次执行前向传播运算
2、nn.ModuleList 用于包装一组网络层,以迭代方式调用网络层
主要方法:
- append():在ModuleList后面添加网络层
- extend():拼接两个ModuleList
- insert():指定在ModuleList中位置插入网络层
3、nn.ModuleDict 用于包装一组网络层,以索引方式调用网络层
主要方法:
- clear():清空ModuleList
- items():返回可迭代的键值对(key-value paris)
- keys():返回字典的键key
- values():返回字典的值values
- pop():返回一对键值,并从字典中删除
总结
- nn.Sequential:顺序性,各网络层之间严格按顺序执行,常用于block构建
- nn.ModuleList:迭代性,常用于大量重复网构建,通过for循环实现重复构建
- nn.ModuleDict:索引性,常用于可选择的网络层
四、AlexNet构建
AlexNet特点如下:
1、采用ReLU:替换饱和激活函数,减轻梯度消失
2、采用LRN(Local Response Normalization):对数据归一化,减轻梯度消失
3、Dropout:提高全连接层的鲁棒性,增加网络的泛化能力
4、Data Augmentation:TenCrop,色彩修改
参考文献:《ImageNet Classification with Deep Convolutional Neural Networks》
AlexNet的结构
采用Sequential将卷积池化进行堆叠
特征提取模块 分类模块
ctrl点击进入