Сохранение / загрузка моделей в пакете 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 вы можете найти дополнительную информацию об ограничениях двух подходов, которые я обсуждал

Другие вопросы по тегам