#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». ‘