首页 > 解决方案 > 为什么“测试过程”在深度学习的时代循环中?

问题描述

我是深度学习的新手,这是我看到的代码

代码很好,但我不明白以下内容:

for epoch in range(1, args.epochs + 1):
    train(epoch)
    test(epoch)
    with torch.no_grad():
        sample = torch.randn(64, 20).to(device)
        sample = model.decode(sample).cpu()

在机器学习中,当我们完成训练时,我们会固定测试数据集的模型参数。这是我的两个问题:

(1) 在深度学习中,我们有训练、验证、测试数据集。代码test(epoch)实际上是用于验证集吗?我们在那里修复模型参数并预测测试数据集outside the epoch loop

(2) 什么with torch.no_grad():意思?为什么它也在里面epoch loop

非常感谢。

标签: python-3.xvalidationneural-networkpytorchtraining-data

解决方案


  1. 是的,test(epoch)这里实际上是用于验证(更新:不完全验证,请查看下面的答案)
  2. with torch.no_grad()意味着您正在关闭梯度(训练期间的反向传播所需)。在验证/测试中你不需要它们,它会节省内存和计算。在这里阅读更多。

另外,请在此处查看教程


推荐阅读