微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 PyTorch 中打印每个时期的验证损失

如何解决在 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)

还是别的?谢谢。

解决方法

不!!!!
enter image description here

在任何情况下都不应使用验证/测试数据训练模型(即调用 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,x)
# total loss - divide by number of batches
val_loss = loss / len(validation_loader)

注意 optimizer 如何与在验证集上评估模型无关。 您无需根据验证数据更改模型 - 仅对其进行验证。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。