nn.Parameter()
官方文档
CLASS torch.nn.parameter.Parameter(data=None, requires_grad=True)
A kind of Tensor that is to be considered a module parameter.Parameters are Tensor subclasses, that have a very special property when used with Module s - when they’re assigned as Module attributes they are automatically added to the list of its parameters, and will appear e.g. in parameters() iterator. Assigning a Tensor doesn’t have such effect. This is because one might want to cache some temporary state, like last hidden state of the RNN, in the model. If there was no such class as Parameter, these temporaries would get registered too.
Parameters
data (Tensor) – parameter tensor.
requires_grad (bool, optional) – if the parameter requires gradient. Default: True
torch.nn.Parameter()
self.v = torch.nn.Parameter(torch.FloatTensor(hidden_size))
- 首先,可以把这个函数理解为类型转换函数,将一个不可训练的类型Tensor转换成可训练的类型parameter并将这个parameter绑定到这个module里面
- 由此,net.parameter()中就有这个绑定的parameter,所以在参数优化的时候可以进行优化的
- 经过类型转换这个self.v变成了模型的Module attributes,即模型中根据训练 update 的参数。
- torch.tensor([1,2,3], requires_grad=True)只是将参数变成可训练的,没有绑定在module的parameter列表中。
- 使用这个函数的目的让某些变量在学习的过程中不断的修改其值以达到最优化。
在concat注意力机制中,权值V是不断学习的,所以是parameter类型。
-
通过实验发现,linear里面的weight和bias就是parameter类型,且不能用tensor类型替换
-
linear里面的weight甚至可能通过指定一个不同于初始化时候的形状进行模型的更改。
-
读取模型参数
for param in net.parameters():
print(type(param.data),param.size())
作者:VanJordan
链接:https://www.jianshu.com/p/d8b77cc02410
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。