Да, вы можете сделать это.
Но нужно помнить одну вещь: input_shape
модели остается неизменным, и поэтому вы должны указать желаемую длину последовательности maximum
. дать ввод в модель.
А теперь вернемся к тому, что вы можете сделать -
Если вы измените вход модели, форма ввода последующего слоя также изменяется.
Что вы можете сделать, так это скопировать архитектуру модели вместе с предварительно подготовленными весами и настроить ее в соответствии с желаемой формой ввода. Неважно, используете ли вы PyTorch или любой другой фреймворк. Только input_shape
изменяется согласно вашему требованию. PyTorch сохраняет веса моделей в OrderedDict
, вы можете загрузить предварительно обученную модель и скопировать веса оттуда.
Пример:
model1 = TheModelClass(*args, **kwargs)
model1.load_state_dict(torch.load(PATH_TO_PRETRAINED_MODEL))
model1.eval()
model2 = TheNewModelClass(*args, **kwargs)
params1 = model1.named_parameters()
params2 = model2.named_parameters()
dict_params2 = dict(params2)
for name1, param1 in params1:
if name1 in dict_params2:
dict_params2[name1].data.copy_(param1.data)
Вы можете найти Несколько хороших справочных ссылок на форуме PyTorch здесь:
https://discuss.pytorch.org/t/copying-weights-from-one-net-to-another/1492
https://discuss.pytorch.org/t/copy-weights-only-from-a-networks-parameters/5841