本文介绍了在PyTorch中打印每个时期的验证损失的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要打印模型在每个纪元的验证损失,获取和打印验证损失的正确方式是什么?

是这样的吗:

criterion = nn.CrossEntropyLoss(reduction='mean')
for x, y in validation_loader:
 optimizer.zero_grad()
 out = model(x)
 loss = criterion(out, y)
 loss.backward()
 optimizer.step()
 losses += loss

display_loss = losses/len(validation_loader)
print(display_loss)

或像这样

criterion = nn.CrossEntropyLoss(reduction='mean')
for x, y in validation_loader:
     optimizer.zero_grad()
     out = model(x)
     loss = criterion(out, y)
     loss.backward()
     optimizer.step()
     losses += loss

display_loss = losses/len(validation_loader.dataset)
print(display_loss)

还是别的什么?谢谢您。

推荐答案

否!

在任何情况下都不应使用验证/测试数据训练模型(即调用loss.backward()+optimizer.step())!

如果要验证模型:

model.eval()  # handle drop-out/batch norm layers
loss = 0
with torch.no_grad():
  for x,y in validation_loader:
    out = model(x)  # only forward pass - NO gradients!!
    loss += criterion(out, y)
# total loss - divide by number of batches
val_loss = loss / len(validation_loader)
请注意optimizer如何与评估验证集上的模型无关。您不能根据验证数据更改模型,只能对其进行验证。

这篇关于在PyTorch中打印每个时期的验证损失的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-27 19:47