【发布时间】:2023-04-09 16:38:01
【问题描述】:
我目前正在使用从 pytorch 预训练的 Faster-RCNN 模型(例如在 torchvision tutorial 中)的迁移学习对自定义数据集进行对象检测。 我想在每个时期结束时计算验证损失字典(如在训练模式下)。 我可以像这样在训练模式下运行模型进行验证:
model.train()
for images, targets in data_loader_val:
images = [image.to(device) for image in images]
targets = [{k: v.to(device) for k, v in t.items()} for t in targets]
with torch.no_grad():
val_loss_dict = model(images, targets)
print(val_loss_dict)
但我不认为这是“正确”的验证方式(导致一些特殊层,如 dropout 和 batch norm 在 eval/train 模式下的工作方式不同)。并且在 eval 模式下,模型返回预测的 bbox(如预期的那样)。我可以为此使用一些内置函数吗?
谢谢。
【问题讨论】:
-
很抱歉,我似乎不太明白这个问题,但有什么反对
model.eval()? -
@marhoruf 调用
model.eval()禁用 dropout 并更改批处理规范以使用历史统计,在验证之前调用它。同样model.train()应该在训练之前被调用。默认情况下,模块处于训练模式。 -
这是一个有效的问题。虽然始终计算损失和输出,但目前 torchvision 在训练模式下返回损失 onyl,请参阅此行:github.com/pytorch/vision/blob/…
标签: python machine-learning computer-vision pytorch object-detection