这一讲我们主要来学习下构造模型的相关技术,包括读取、存储和计算,基本可以直接上手代码,文章属于小小补充。
更新历史
- 2019.11.07: 完成初稿
模型构造
前面我们是基于 Sequential
实例来构造网络的,如果我们想要搞更多自定义的东西,用 Module
类就非常合适。我们用 Module 的方式再实现一次 MLP,代码如下:
注意,通过 Module 我们可以实现很多不同的计算图机制,比如 Sequential
, ModuleList
和 ModuleDict
等等
模型参数的访问、初始化和共享
这一部分主要是编写代码上的技巧,直接看代码:
一些要点:
- 如果网络中一个变量是
torch.nn.parameter.Parameter
类型,会被自动添加到参数列表里 Parameter
也是Tensor
,有data
和grad
属性- 传入
Sequential
模块是同一个Module
实例,参数会共享,共享参数的梯度是累加的
自定义层
这一节也是比较基础的编码技巧,直接看代码:
读取和存储
我们可以直接使用 save
和 load
来存储/读取 Tensor
,基于 pickle。其他的看代码:
使用 GPU 计算
使用 GPU 计算基本来来说要用好 .cuda()
函数,然后通过 .device
方法查看 Tensor 或者 Model 到底在哪里。其他的是一些操作细节,这里不赘述。