Pytorch:训练期间的中间测试

mcE*_*nge 5 pytorch

如何在训练期间在验证数据上测试我的 pytorch 模型?我知道有一个函数myNet.eval()可以明显地切换任何 dropout 层,但它是否也阻止了梯度的累积?
另外,我将如何撤消myNet.eval()命令以继续进行培训?

如果有人有一些代码片段/玩具示例,我将不胜感激!

nem*_*emo 4

如何在训练期间根据验证数据测试我的 pytorch 模型?

有很多例子表明训练期间每个时期都有训练和测试步骤。一个简单的示例是MNIST 官方示例。由于 pytorch 不提供任何高级培训、验证或评分框架,您必须自己编写。通常这包括

  • 数据加载器(通常基于torch.utils.dataloader.Dataloader
  • 历元总数的主循环
  • train()使用训练数据来优化模型的函数
  • 一个test()valid()函数来衡量给定验证数据和指标的模型的有效性

您也会在链接的示例中找到这一点。

或者,您可以使用提供基本循环和验证工具的框架,这样您就不必一直自己实现所有内容。

  • tnt是 pytorch 的 torchnet,为您提供不同的指标(例如准确性)和训练循环的抽象。请参阅此 MNIST 示例
  • infernotorchsample尝试对与 Keras 非常相似的事物进行建模,并提供一些用于验证的工具
  • skorch是 pytorch 的 scikit-learn 包装器,可让您使用 sklearn 中的所有工具和指标

另外,我将如何撤消myNet.eval()命令以继续训练?

myNet.train()或者,提供一个布尔值以在评估和训练之间切换:myNet.train(True)用于训练模式。