【问题标题】:Pytorch: Intermediate testing during trainingPytorch:训练期间的中间测试
【发布时间】:2018-06-22 06:39:11
【问题描述】:

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

如果有人有一些代码 sn-p / toy 示例,我将不胜感激!

【问题讨论】:

    标签: pytorch


    【解决方案1】:

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

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

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

    这也是您将在链接示例中找到的内容。

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

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

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

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

    【讨论】:

      【解决方案2】:

      我知道有一个函数 myNet.eval() 显然可以切换任何 dropout 层,但它是否也阻止了梯度的累积?

      它不会阻止渐变的累积。

      但我认为在测试期间,您确实想忽略渐变。在这种情况下,您应该将输入到网络的变量标记为volatile=True,这样可以节省一些用于前向计算的时间和空间。

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

      myNet.train()

      【讨论】:

        猜你喜欢
        • 2021-03-28
        • 1970-01-01
        • 1970-01-01
        • 2017-06-07
        • 1970-01-01
        • 1970-01-01
        • 2019-10-24
        • 2019-03-10
        • 1970-01-01
        相关资源
        最近更新 更多