Сохранение / загрузка моделей в пакете AllenNLP
Я пытаюсь загрузить вес модели AllenNLP. Я не смог найти никакой документации о том, как сохранить / загрузить всю модель, поэтому играл только с весами.
from allennlp.nn import util
model_state = torch.load(filename_model, map_location=util.device_mapping(-1))
model.load_state_dict(model_state)
Я немного изменил свой входной корпус, и я предполагаю, что из-за этого я получаю несоответствие размера корпуса:
RuntimeError: Error(s) in loading state_dict for BasicTextFieldEmbedder:
size mismatch for token_embedder_tokens.weight: copying a param with shape torch.Size([2117, 16]) from checkpoint, the shape in current model is torch.Size([2129, 16]).
Казалось бы, нет официального способа сохранить модель с помощью словаря корпусов. Любые хаки вокруг этого?
0 ответов
В AllenNLP есть функция, позволяющая загрузить или сохранить модель. Вы выполнили шаги, описанные в руководстве AllenNLP? Ниже я вставил отрывок из учебника, который может вас заинтересовать:
# Here's how to save the model.
with open("/tmp/model.th", 'wb') as f:
torch.save(model.state_dict(), f)
vocab.save_to_files("/tmp/vocabulary")
# And here's how to reload the model.
vocab2 = Vocabulary.from_files("/tmp/vocabulary")
model2 = LstmTagger(word_embeddings, lstm, vocab2)
with open("/tmp/model.th", 'rb') as f:
model2.load_state_dict(torch.load(f))
Если вышеуказанное почему-то не работает для вас, вы можете проверить allennlp.models.archival.archive_model
вспомогательная функция. Используя эту функцию, вы сможете заархивировать тренировочную конфигурацию вашей модели вместе с весами и словарем в model.tar.gz.Here
вы можете найти дополнительную информацию об ограничениях двух подходов, которые я обсуждал