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

Load a single layer weights from a pretrained model

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

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

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

谢谢

您的解决方案应该可行,而且对我来说似乎很简单。

https://pytorch.org/docs/master/_modules/torch/nn/modules/linear.html#Linear 上的源代码可以看出 nn.Linear 模块具有属性 in_featuresout_featuresweight1 和 [=14] =]:

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 相同,您就可以像以前那样替换权重和偏差。

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