Загрузка однослойных весов из предварительно обученной модели - PullRequest
0 голосов
/ 27 апреля 2018

Я хочу специально добавить предварительно подготовленные параметры модели некоторых слоев в мою новую сеть. Для линейного слоя я только что сделал:

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

Будет ли этого достаточно, или есть какие-то другие параметры, которые мне нужно загрузить, или есть более простой способ, чем этот. Мой модуль уже обучен, и я просто хочу загрузить параметры для нескольких слоев.

Спасибо

1 Ответ

0 голосов
/ 04 мая 2018

Ваше решение должно работать и кажется мне достаточно простым.

Из исходного кода на 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 идентичны, вы можете просто заменить веса и смещения, как и вы.

В качестве альтернативы, вы можете заменить весь линейный модуль в одной сети на модуль другой, если вы сохранили его как атрибут.

...