Мое сильное предположение состоит в том, что stage-2.pth
содержит два элемента верхнего уровня: сама модель (ее веса) и конечное состояние оптимизатора, который использовался для ее обучения. Чтобы загрузить только модель, вам нужно только первое. Предполагая, что все было сделано идиоматическим способом PyTorch, я бы попробовал
learner.model.load_state_dict(
torch.load('stage-2.pth', map_location="cpu")['model']
)
Обновление: после применения моего первого раунда рекомендаций становится ясно, что вы загружаете созданную точку сохранения с другой (возможно, по-другому настроенной?) Моделью, чем та, в которую вы загружаете ее. Как вы можете видеть из пастбина, точка сохранения содержит веса для некоторых дополнительных слоев, которых нет в вашей модели, таких как bn3
, downsample
и т. Д.
"0.4.0.bn3.running_var", "0.4.0.bn3.num_batches_tracked", "0.4.0.downsample.0.weight"
в то же время некоторые другие ключевые имена совпадают, но тензоры имеют разные формы.
несоответствие размера для 0.5.0.downsample.0.weight: копирование параметра с факелом формы. Размер ([512, 256, 1, 1]) из контрольной точки, форма в текущей модели - torch.Size ([128 , 64, 1, 1]).
Я вижу шаблон, в котором вы последовательно пытаетесь загрузить параметр формы [2^(x+1), 2^x, 1, 1]
вместо [2^(x), 2^(x-1), 1, 1]
. Возможно, вы пытаетесь загрузить модель различной глубины (например, загрузка весов vgg-16 для vgg-11?). В любом случае вам необходимо выяснить точную архитектуру, использованную для создания точки сохранения, а затем воссоздать ее перед загрузкой точки сохранения.
PS. Если вы не были уверены - точки сохранения содержат веса моделей, а также их формы и (автоматически сгенерированные) имена. Они не содержат полную спецификацию самой архитектуры - вам нужно убедиться, что вы вызываете model.load_state_dict
с model
точно такой же архитектуры, которая использовалась для создания точки сохранения. В противном случае у вас могут быть несоответствующие имена весов.