Как извлечь особенности из предварительно подготовленной модели Pytorch - PullRequest
0 голосов
/ 17 октября 2019

Мне нужно извлечь функции из предварительно обученной (отлаженной) модели BERT.

Я точно настроил модель BERT с предварительной подготовкой в ​​Pytorch, используя трансформатор с обнимающим лицом. Все обучение / проверка выполняется на графическом процессоре в облаке.

В конце обучения я сохраняю модель и токенизатор, как показано ниже:

best_model.save_pretrained('./saved_model/')
tokenizer.save_pretrained('./saved_model/')

Это создает следующие файлы вsaved_model каталог:

config.json
added_token.json
special_tokens_map.json
tokenizer_config.json
vocab.txt
pytorch_model.bin

Я сохраняю каталог saved_model на своем компьютере и загружаю model и tokenizer, как показано ниже

model = torch.load('./saved_model/pytorch_model.bin',map_location=torch.device('cpu'))
tokenizer = BertTokenizer.from_pretrained('./saved_model/')

Теперь для извлечения функций,Я делаю ниже

input_ids = torch.tensor([tokenizer.encode("Here is some text to encode", add_special_tokens=True)])
last_hidden_states = model(input_ids)[0][0]

Но для последней строки мне выдается ошибка TypeError: 'collections.OrderedDict' object is not callable

Кажется, я не загружаю модель должным образом. Вместо того, чтобы загружать всю модель сама по себе, я думаю, что моя строка model=torch.load(....) загружает упорядоченный словарь.

Что мне здесь не хватает? Я даже правильно сохраняю модель? Пожалуйста, предложите.

1 Ответ

1 голос
/ 17 октября 2019

torch.load () возвращает объект collections.OrderedDict. Проверьте рекомендуемый способ сохранения и загрузки диктанта состояния модели.

Сохранить :

torch.save(model.state_dict(), PATH)

Загрузка :

model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH))
model.eval()

Итак, в вашем случае это должно быть:

model = BertModel(config)
model.load_state_dict('./saved_model/pytorch_model.bin',
                       map_location=torch.device('cpu'))
model.eval() # to disable dropouts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...