我想专门将一些图层的预训练模型参数添加到我的新网络中。 对于线性层我刚刚做了:
model_enc.linear_3d.weight = model_trained.linear_3d.weight
model_enc.linear_3d.bias = model_trained.linear_3d.bias
这是否足够,或者我需要加载任何其他参数,还是有一种简单的方法。我的模块已经过训练,我只想加载params几层。
谢谢
答案 0 :(得分:0)
你的解决方案应该起作用,对我来说似乎很容易。
从https://pytorch.org/docs/master/_modules/torch/nn/modules/linear.html#Linear上的源代码中,您可以看到nn.Linear模块具有in_features
,out_features
,weight1
和bias
的属性:< / p>
def __init__(self, in_features, out_features, bias=True):
super(Linear, self).__init__()
self.in_features = in_features
self.out_features = out_features
self.weight = Parameter(torch.Tensor(out_features, in_features))
if bias:
self.bias = Parameter(torch.Tensor(out_features))
else:
self.register_parameter('bias', None)
self.reset_parameters()
因此,只要您的in_features
和out_features
相同,您就可以像过滤一样替换权重和偏见。
或者,如果您将其作为属性存储,则可以将一个网络中的整个线性模块替换为另一个网络中的模块。