从预训练模型加载单层权重

时间:2018-04-27 09:40:44

标签: conv-neural-network pytorch

我想专门将一些图层的预训练模型参数添加到我的新网络中。 对于线性层我刚刚做了:

model_enc.linear_3d.weight = model_trained.linear_3d.weight
model_enc.linear_3d.bias = model_trained.linear_3d.bias

这是否足够,或者我需要加载任何其他参数,还是有一种简单的方法。我的模块已经过训练,我只想加载params几层。

谢谢

1 个答案:

答案 0 :(得分:0)

你的解决方案应该起作用,对我来说似乎很容易。

https://pytorch.org/docs/master/_modules/torch/nn/modules/linear.html#Linear上的源代码中,您可以看到nn.Linear模块具有in_featuresout_featuresweight1bias的属性:< / 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_featuresout_features相同,您就可以像过滤一样替换权重和偏见。

或者,如果您将其作为属性存储,则可以将一个网络中的整个线性模块替换为另一个网络中的模块。