загрузка предварительно подготовленной модели объект pytorch — dict не имеет атрибута eval

#pytorch

#python #глубокое обучение #conv-нейронная сеть #pytorch

Вопрос:

 def save_checkpoint(state, is_best, filename='checkpoint.pth.tar'):
    torch.save(state, filename)
    if is_best:
        shutil.copyfile(filename, 'model_best.pth.tar')


save_checkpoint({
                'epoch': epoch   1,
                'arch': args.arch,
                'state_dict': model.state_dict(),
                'best_prec1': best_prec1,
                'optimizer': optimizer.state_dict()
            }, is_best)
 

Я сохраняю свою модель следующим образом. Как я могу загрузить обратно модель, чтобы я мог использовать ее в других местах, например, в визуализации cnn?

Вот как я сейчас загружаю модель:

 torch.load('model_best.pth.tar')
 

Но когда я это делаю, я получаю эту ошибку:

Ошибка атрибута: объект ‘dict’ не имеет атрибута ‘eval’

Чего мне здесь не хватает???

РЕДАКТИРОВАТЬ: я хочу использовать модель, которую я обучил, для визуализации фильтров и оценок. Я использую это репозиторий для создания vis. Я заменил строку 179 на torch.load('model_best.pth.tar')

Комментарии:

1. Я не получал сообщение об ошибке при сохранении, как у вас. какая у вас версия pytorch?

2. @SalihKaragoz версия pytorch: 0.4.1

3. должен ли он что-то делать с тем, как я храню модель? мой пользовательский dict?

4. Я думаю, вам следует предоставить больше информации. Синтаксической ошибки нет. Вы пытаетесь загрузить для multigpus или что-то в этом роде?

5. Нет, нет. Просто пытаюсь загрузить модель, чтобы я мог ее протестировать, а затем я хочу визуализировать градации и фильтры.

Ответ №1:

Во-первых, вы указали свою модель. И torch.load() выдает вам словарь. Этот словарь не имеет функции eval. Поэтому вы должны загрузить веса в свою модель.

 import torch
from modelfolder import yourmodel

model = yourmodel()
checkpoint = torch.load('model_best.pth.tar')
try:
    checkpoint.eval()
except AttributeError as error:
    print error
### 'dict' object has no attribute 'eval'

model.load_state_dict(checkpoint['state_dict'])
### now you can evaluate it
model.eval()
 

Комментарии:

1. после этого я получил сообщение об ошибке: «Отсутствует ключ (ы) в state_dict: «fc.weight», «fc.bias». ‘