【问题标题】:Predictions doesn't equal number of images预测不等于图像数量
【发布时间】:2021-06-18 07:38:27
【问题描述】:

我的验证数据是 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())

【问题讨论】:

  • 你可以试试sum([len(x) for x, y in validloader]) 之类的方法并验证输出是否为 150 吗?
  • 我做了,确实是150
  • 好的。您究竟在代码中的哪个位置发现预测的长度不是 150?
  • pred_v = pred_v.numpy() print(len(pred))

标签: machine-learning deep-learning computer-vision pytorch conv-neural-network


【解决方案1】:

如果您想获得完整的预测,您应该存储每个单独批次的预测并在迭代结束时将它们连接起来

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

【讨论】:

    猜你喜欢
    • 2017-04-13
    • 2019-10-10
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    相关资源
    最近更新 更多