Я получаю ошибку при попытке предсказать одно изображение CNN pytorch
Сообщение об ошибке
Traceback (последний вызов последним): файл «pred.py», строка 134, в output = model(data) Ошибка выполнения: ожидается 4-мерный ввод для 4-мерного веса [16, 3, 3, 3], но получен Вместо этого 3-мерный ввод размера [1, 32, 32].
Код прогноза
normalize = transforms.Normalize(mean=[0.4914, 0.4824, 0.4467],
std=[0.2471, 0.2435, 0.2616])
train_set = transforms.Compose([
transforms.RandomCrop(32, padding=4),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
normalize,
])
model = models.condensenet(args)
model = nn.DataParallel(model)
PATH = "results/savedir/save_models/checkpoint_001.pth.tar"
model.load_state_dict(torch.load(PATH)['state_dict'])
device = torch.device("cpu")
model.eval()
image = Image.open("horse.jpg")
input = train_set(image)
train_loader = torch.utils.data.DataLoader(
input,
batch_size=1,shuffle=True, num_workers=1)
for i, data in enumerate(train_loader):
#input_var = torch.autograd.Variable(data, volatile=True)
#input_var = input_var.view(1, 3, 32,32)
**output = model(data)
topk=(1,5)
maxk = max(topk)
_, pred = output.topk(maxk, 1, True, True)
Я получаю эту ошибку, когда пытаюсь предсказать на одном изображении Сообщение об ошибке формы / размера изображения
2 ответа
Пожалуйста, раскомментируйте эту строку
#input_var = input_var.view(1, 3, 32,32)
так что ваш входной размер равен 4.
Я предполагаю, что ваш нет. входных каналов - 3, если его один, тогда используйте
input_var = input_var.view(1, 1, 32,32)
если серая шкала
Вместо того, чтобы выполнять цикл for и train_loader, решил эту проблему, просто передав ввод непосредственно в модель. как это
input = train_set(image)
input = input.unsqueeze(0)
model.eval()
output = model(input)
Подробнее можно узнать здесь ссылка