深度之眼PyTorch训练营第二期 ---6、nn.Module与网络模型构建

一、网络模型创建步骤

数据->模型->损失函数->优化器

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总结
  1. 一个module可以包含多个子module
  2. 一个module相当于一个运算,必须事先forward()函数
  3. 每个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点击进入

原文地址:https://www.cnblogs.com/cola-1998/p/11805415.html