一、 模型容器(Containers)
1、容器之Sequential
nn.Sequential 是 nn.module的容器,用于按顺序包装一组网络层
• 顺序性:各网络层之间严格按照顺序构建
• 自带forward():自带的forward里,通过for循环依次执行前向传播运算
6
2、容器之ModuleList
nn.ModuleList是 nn.module的容器,用于包装一组网络层,以迭代方式调用网络层
主要方法:
• append(): 在ModuleList后面添加网络层
• extend():拼接两个ModuleList
• insert(): 指定在ModuleList中位置插入网络层
3、容器之ModuleLDict
nn.ModuleDict是 nn.module的容器,用于包装一组网络层,以索引方式调用网络层
主要方法:
• clear(): 清空ModuleDict
• items(): 返回可迭代的键值对(key-value pairs)
• keys(): 返回字典的键(key)
• values(): 返回字典的值(value)
• pop(): 返回一对键值,并从字典中删除
4、容器总结
• nn.Sequential: 顺序性,各网络层之间严格按顺序执行,常用于block构建
• nn.ModuleList: 迭代性,常用于大量重复网构建,通过for循环实现重复构建
• nn.ModuleDict: 索引性,常用于可选择的网络层
二、AlexNet构建
AlexNet: 2012年以高出第二名10多个百分点的准确率获ImageNet分类任务冠军,开创了卷积神经网络的新时代。
AlexNet特点如下:
- 采用ReLU:替换饱和激活函数,减轻梯度消失
- 采用LRN(Local Response Normalization):对数据归一化,减轻梯度消失
- Dropout:提高全连接层的鲁棒性,增加网络的泛化能力
- Data Augmentation: TenCrop,色彩修改