0%

【动手学深度学习】2 深度学习计算

这一讲我们主要来学习下构造模型的相关技术,包括读取、存储和计算,基本可以直接上手代码,文章属于小小补充。


更新历史

  • 2019.11.07: 完成初稿

模型构造

前面我们是基于 Sequential 实例来构造网络的,如果我们想要搞更多自定义的东西,用 Module 类就非常合适。我们用 Module 的方式再实现一次 MLP,代码如下:

注意,通过 Module 我们可以实现很多不同的计算图机制,比如 Sequential, ModuleListModuleDict 等等

模型参数的访问、初始化和共享

这一部分主要是编写代码上的技巧,直接看代码:

一些要点:

  • 如果网络中一个变量是 torch.nn.parameter.Parameter 类型,会被自动添加到参数列表里
  • Parameter 也是 Tensor,有 datagrad 属性
  • 传入 Sequential 模块是同一个 Module 实例,参数会共享,共享参数的梯度是累加的

自定义层

这一节也是比较基础的编码技巧,直接看代码:

读取和存储

我们可以直接使用 saveload 来存储/读取 Tensor,基于 pickle。其他的看代码:

使用 GPU 计算

使用 GPU 计算基本来来说要用好 .cuda() 函数,然后通过 .device 方法查看 Tensor 或者 Model 到底在哪里。其他的是一些操作细节,这里不赘述。