预测不等于图像数量
Predictions doesn't equal number of images
我的验证数据是 150 张图像,但是当我尝试使用我的模型来预测它们时,我的预测长度为 22 我不明白为什么?
total_v=0
correct_v=0
with torch.no_grad():
model.eval()
for data_v, target_v in (validloader):
if SK:
target_v = torch.tensor(np.where(target_v.numpy() == 2, 1, 0).astype(np.longlong))
else:
target_v = torch.tensor(np.where(target_v.numpy() == 0, 1, 0).astype(np.longlong))
data_v, target_v = data_v.to(device), target_v.to(device)
outputs_v = model(data_v)
loss_v = criterion(outputs_v, target_v)
batch_loss += loss_v.item()
_,pred_v = torch.max(outputs_v, dim=1)
correct_v += torch.sum(pred_v==target_v).item()
total_v += target_v.size(0)
val_acc.append(100 * correct_v/total_v)
val_loss.append(batch_loss/len(validloader))
network_learned = batch_loss < valid_loss_min
print(f'validation loss: {np.mean(val_loss):.4f}, validation acc: {(100 *
correct_v/total_v):.4f}\n')
这是我的模型
model = models.resnet50(pretrained = True)
num_ftrs = model.fc.in_features
model.fc = nn.Linear(num_ftrs, 2)
model.to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adagrad(model.parameters())
如果你想拥有整个预测,你应该存储每个单独批次的预测并在迭代结束时将它们连接起来
...
all_preds = []
for data_v, target_v in validloader:
....
_,pred_v = torch.max(outputs_v, dim=1)
all_preds.append(pred_v)
....
all_preds = torch.cat(all_preds).cpu().numpy()
print(len(all_preds))
我的验证数据是 150 张图像,但是当我尝试使用我的模型来预测它们时,我的预测长度为 22 我不明白为什么?
total_v=0
correct_v=0
with torch.no_grad():
model.eval()
for data_v, target_v in (validloader):
if SK:
target_v = torch.tensor(np.where(target_v.numpy() == 2, 1, 0).astype(np.longlong))
else:
target_v = torch.tensor(np.where(target_v.numpy() == 0, 1, 0).astype(np.longlong))
data_v, target_v = data_v.to(device), target_v.to(device)
outputs_v = model(data_v)
loss_v = criterion(outputs_v, target_v)
batch_loss += loss_v.item()
_,pred_v = torch.max(outputs_v, dim=1)
correct_v += torch.sum(pred_v==target_v).item()
total_v += target_v.size(0)
val_acc.append(100 * correct_v/total_v)
val_loss.append(batch_loss/len(validloader))
network_learned = batch_loss < valid_loss_min
print(f'validation loss: {np.mean(val_loss):.4f}, validation acc: {(100 *
correct_v/total_v):.4f}\n')
这是我的模型
model = models.resnet50(pretrained = True)
num_ftrs = model.fc.in_features
model.fc = nn.Linear(num_ftrs, 2)
model.to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adagrad(model.parameters())
如果你想拥有整个预测,你应该存储每个单独批次的预测并在迭代结束时将它们连接起来
...
all_preds = []
for data_v, target_v in validloader:
....
_,pred_v = torch.max(outputs_v, dim=1)
all_preds.append(pred_v)
....
all_preds = torch.cat(all_preds).cpu().numpy()
print(len(all_preds))