这是计算平均准确度的正确方法吗?

I this the correct way of computing the average accuracy?

我对编码还很陌生,对平均准确度和总体准确度感到困惑。我创建了一个函数来计算精度,然后在每个纪元结束时将此结果除以 len(dataloader)。这是计算平均准确度的正确方法吗?如果没有,有人可以解释我如何正确地做到这一点吗?

def accuracy(predictions, labels):
   classes = torch.argmax(predictions, dim=1)
   return torch.mean((classes == labels).float())


def train(model, optimizer, dataloader):

  #Setting model to train mode
  model.train()

  acc = 0.0
  loss = 0.0


  loss_fc = nn.CrossEntropyLoss()


  for i, (img, label) in enumerate(dataloader):

    #source images and labels to cpu device  
    img, label = img.to(device), label.to(device)

  
    y_pred = model(img)

   
    optimizer.zero_grad()

   
    loss = loss_fc(y_pred, label)

    loss.backward()
    optimizer.step()
        
    #Update loss and accuracy    
    loss += loss.item() 
    acc += accuracy(y_pred, s_label)


  loss /= len(dataloader)
  acc /= len(dataloader)
  

不确定您所说的总体准确率和平均准确率是什么意思。通常在每个纪元结束时计算准确度。您将您的预测和实际标签传递给准确度函数,它 returns 您以小数 (0-1) 表示的正确比例。

我没有看到在训练期间计算每个时期的平均准确度有任何用处,因为该指标会受到模型学习速度的严重影响,而不是它最终能够执行的效果,例如一个需要很多 epoch 才能表现良好的模型在这个平均精度上可能比可以在更少 epoch 上收敛的模型更差。

如果您查看 scikit-learn 中的准确度得分指标,它应该可以帮助您理清头绪。

Link: https://scikit-learn.org/stable/modules/generated/sklearn.metrics.accuracy_score.html

希望对您有所帮助!