The title of your publication挨打

Page 97

第四章 torch.nn Parameters class torch.nn.Parameter() Variable 的一种,常被用于模块参数(module parameter)。 Parameters 是 Variable 的子类。Paramenters 和 Modules 一起使用的时候会有一些特殊的属性,即:当 Paramenters 赋值给 Module 的属性的时候,他会自动的被加到 Module 的 参数列表中(即:会出现 在 parameters() 迭代器中)。将 Varibale 赋值给 Module 属性则不会有这样的影响。 这样做的原因是: 我们有时候会需要缓存一些临时的状态(state), 比如:模型中 RNN 的最后一个隐状态。如果没有 Parameter 这个类的话,那么这些临时变量也会注册成为模型变量。 Variable 与 Parameter 的另一个不同之处在于,Parameter 不能被 volatile(即:无法设置 volatile=True) 而且默认 requires_grad=True。Variable 默认 requires_grad=False。 参数说明:

 data (Tensor) – parameter tensor.  requires_grad (bool, optional) – 默认为 True,在 BP 的过程中会对其求微分。 Containers(容器): class torch.nn.Module 所有网络的基类。 你的模型也应该继承这个类。 Modules 也可以包含其它 Modules,允许使用树结构嵌入他们。你可以将子模块赋值给模型属性。 import torch.nn as nn import torch.nn.functional as F class Model(nn.Module): def __init__(self): super(Model, self).__init__() self.conv1 = nn.Conv2d(1, 20, 5)# submodule: Conv2d self.conv2 = nn.Conv2d(20, 20, 5) def forward(self, x): x = F.relu(self.conv1(x)) return F.relu(self.conv2(x)) 通过上面方式赋值的 submodule 会被注册。当调用 .cuda() 的时候,submodule 的参数也会转换为 cuda Tensor。 add_module(name, module) 将一个 child module 添加到当前 modle。 被添加的 module 可以通过 name 属性来获取。 例: import torch.nn as nn class Model(nn.Module): def __init__(self): super(Model, self).__init__() self.add_module("conv", nn.Conv2d(10, 20, 4)) #self.conv = nn.Conv2d(10, 20, 4) 和上面这个增加 module 的方式等价 model = Model()


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.