У меня есть функция PublicTest
, которая запускает каждую эпоху для проверки, и есть переменная transform test
, которая преобразует данные проверки, как указано выше:
transform_test = transforms.Compose([
transforms.TenCrop(cut_size),
transforms.Lambda(lambda crops: torch.stack([transforms.ToTensor()(crop) for crop in crops])),
])
def PublicTest(epoch):
global PublicTest_acc
global best_PublicTest_acc
global best_PublicTest_acc_epoch
net.eval()
PublicTest_loss = 0
correct = 0
total = 0
for batch_idx, (inputs, targets) in enumerate(PublicTestloader):
bs, ncrops, c, h, w = np.shape(inputs)
inputs = inputs.view(-1, c, h, w)
if use_cuda:
inputs, targets = inputs.cuda(), targets.cuda()
inputs, targets = Variable(inputs, volatile=True), Variable(targets)
outputs = net(inputs)
outputs_avg = outputs.view(bs, ncrops, -1).mean(1) # avg over crops
loss = criterion(outputs_avg, targets)
PublicTest_loss += loss.item()
_, predicted = torch.max(outputs_avg.data, 1)
total += targets.size(0)
correct += predicted.eq(targets.data).cpu().sum()
utils.progress_bar(batch_idx, len(PublicTestloader), 'Loss: %.3f | Acc: %.3f%% (%d/%d)'
% (PublicTest_loss / (batch_idx + 1), 100. * correct / total, correct, total))
Я хотел бы изменить код так вместо Tencrop
каждое изображение будет проверено один раз. Я изменил transform_test
вот так
transform_test = transforms.Compose([transforms.ToTensor()])
Я запустил код, но понял, что PublicTest
имеет ncrops
в качестве параметра, и получил ошибку:
File "mainpro_FER.py", line 147, in PublicTest
bs, ncrops, c, h, w = np.shape(inputs)
ValueError: not enough values to unpack (expected 5, got 4)
удалил параметр ncrops
в функции, попробовал еще раз, имел эту ошибку:
IndexError: Размер вне диапазона (ожидается, что находится в диапазоне [-1, 0], но получил 1)
Поэтому мне нужен способ, чтобы эта функция работала для одного изображения для каждого изображения в серии, в отличие от TenCrop. Спасибо.