load a pretrained model pytorch - dict object has no attribute eval

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)

I am saving my model like this. How can I load back the model so that I can use it in other places, like cnn visualization?

This is how I am loading the model now:

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

But when I do this, I get this error:

AttributeError: 'dict' object has no attribute 'eval'

What am I missing here???

EDIT: I want to use the model that I trained to visualize the filters and grads. I am using this repo to make the vis. I replaced line 179 with torch.load('model_best.pth.tar')

1 answer

  • answered 2018-08-12 19:32 Salih Karagoz

    First, you have stated your model. And torch.load() gives you a dictionary. That dictionary has not an eval function. So you should upload the weights to your model.

    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()