简单粗暴PyTorch之模型创建与nn.module

模型创建与nn.module

  • 一、模型的创建
    • 1.1 构建子模块
    • 1.2 拼接子模块
  • 二、nn.Module

一、模型的创建

模型创建的步骤:
简单粗暴PyTorch之模型创建与nn.module_第1张图片
模型构建的两个要素

  1. 构建子模块
  2. 拼接子模块

1.1 构建子模块

简单粗暴PyTorch之模型创建与nn.module_第2张图片
以之前上传的纸币二分类代码为例,对模型的构建进行讲解。

在70行设置断点,查看如何构建LeNet网络。
在这里插入图片描述
step into 进入
简单粗暴PyTorch之模型创建与nn.module_第3张图片
进入到LeNet的__init__函数构建子模块,创建了两个卷积层与三个全连接层。运行完最后一个子模块self.fc3就会跳出返回,模型的初始化便完成了。
简单粗暴PyTorch之模型创建与nn.module_第4张图片

1.2 拼接子模块

模块在__init__构建好之后,神魔时候拼接实现前向传播呢。

下次使用模型在训练时,直接跳转到,训练时模型的使用
简单粗暴PyTorch之模型创建与nn.module_第5张图片
step into进入95行代码,进入到了module.py的call函数,因为LeNet继承于nn.module
简单粗暴PyTorch之模型创建与nn.module_第6张图片
进入到547行forword,查看在哪里实现了前向传播,进入到了LeNet函数的forword函数,具体实现前向传播,每一层网络的计算
简单粗暴PyTorch之模型创建与nn.module_第7张图片
得到分类结果out,返回out,得到了outputs输出
简单粗暴PyTorch之模型创建与nn.module_第8张图片

二、nn.Module

nn.Module在torch.nn下
简单粗暴PyTorch之模型创建与nn.module_第9张图片
nn.module通过八个有序字典来管理模型
简单粗暴PyTorch之模型创建与nn.module_第10张图片
• parameters: 存储管理nn.Parameter类,如权值、偏置
• modules : 存储管理nn.Module类,如卷积层、池化层
• buffers:存储管理缓冲属性,如BN层中的running_mean
• ***_hooks:存储管理钩子函数

debug进入到LeNet的__init__函数
简单粗暴PyTorch之模型创建与nn.module_第11张图片
因为继承与nn.Module,进入14行,到nn.module的__init__函数下

简单粗暴PyTorch之模型创建与nn.module_第12张图片
进入到construct函数,这里实现了八个有序字典的初始化
简单粗暴PyTorch之模型创建与nn.module_第13张图片
可以看到字典_modules下存贮的是卷积层、全连接层
简单粗暴PyTorch之模型创建与nn.module_第14张图片
因为卷积层也是继承于nn.module,也有八个字典,可以看到,parameters下面存储的是权重与偏置
简单粗暴PyTorch之模型创建与nn.module_第15张图片
每次进行类属性的赋值,会被module中的setattr函数拦截,判断属于parameters还是modules
简单粗暴PyTorch之模型创建与nn.module_第16张图片

nn.Module总结
• 一个module可以包含多个子module
• 一个module相当于一个运算,必须实现forward()函数
• 每个module都有8个字典管理它的属性

你可能感兴趣的:(简单粗暴Pytorch学习,pytorch,深度学习)