Ваше решение должно работать и кажется мне достаточно простым.
Из исходного кода на https://pytorch.org/docs/master/_modules/torch/nn/modules/linear.html#Linear видно, что модуль nn.Linear имеет атрибуты in_features
, out_features
, weight1
и bias
:
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
идентичны, вы можете просто заменить веса и смещения, как и вы.
В качестве альтернативы, вы можете заменить весь линейный модуль в одной сети на модуль другой, если вы сохранили его как атрибут.