为什么“测试过程”在深度学习的时代循环之内?

问题描述 投票:0回答:2

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

代码很好,但是我听不懂以下内容:

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.x validation neural-network pytorch training-data
2个回答
1
投票
  1. 是,test(epoch)实际上是在这里进行验证的((更新:不完全验证,请在下面的答案中检查)
  2. with torch.no_grad()表示您正在关闭梯度(训练期间反向传播所需)。在验证/测试中,您不需要它们,它将节省内存和计算量。阅读更多here

也请检查tutorial here


1
投票
  1. 在您共享的示例中,没有验证。通常,我们执行验证以确定模型是否从上一个时期开始改进并保存检查点。在此示例中,作者无需进行任何验证检查即可进行培训和测试。

  2. with torch.no_grad()基本上禁用了梯度计算。当您确定不会调用Tensor.backward()时,禁用梯度计算对于推断很有用。它将减少用于计算的内存消耗。

  3. 为什么在epoch循环中,他们使用随机样本执行解码?这只是为了查看从随机样本生成的图像的可视化。请注意,test(epoch)函数为您提供定量值,该值告诉您模型的执行情况。但是,图像生成旨在进行定性比较,即模型如何在每个时期改善图像生成。

© www.soinside.com 2019 - 2024. All rights reserved.