RuntimeError: попытка десериализации объекта на устройстве CUDA, но torch.cuda.is_available () имеет значение False - PullRequest
0 голосов
/ 29 мая 2020

RuntimeError: Попытка десериализации объекта на устройстве CUDA, но torch.cuda.is_available () имеет значение False. Если вы работаете на машине только с ЦП, используйте torch.load с map_location = torch.device ('cpu') для сопоставления хранилищ с ЦП.

Я получаю указанную выше ошибку для кода: -

def get_model(path, device):
    model = models.vgg16(pretrained=False)

    for param in model.parameters():
        param.requires_grad = False
    n_inputs = model.classifier[6].in_features

    model.classifier[6] = torch.nn.Sequential(
        torch.nn.Linear(n_inputs, 256), torch.nn.ReLU(), torch.nn.Dropout(0.2),
        torch.nn.Linear(256, 10), torch.nn.LogSoftmax(dim=1))

    model.load_state_dict(torch.load(path), map_location=torch.device('cpu'))
    model.to(device)
    model.eval()
    return model

device = torch.device("cpu")
model = get_model('vgg16.pt', device)

1 Ответ

0 голосов
/ 29 мая 2020

Вы передаете map_location неправильной функции (model.load_state_dict вместо torch.load).

Исправленная строка будет выглядеть так:

model.load_state_dict(torch.load(path, map_location=torch.device('cpu')))
...