【问题标题】:What effects should tensorflow.compat.v1.disable_v2_behavior() have on training using the Keras API?tensorflow.compat.v1.disable_v2_behavior() 应该对使用 Keras API 的训练产生什么影响?
【发布时间】:2020-08-30 08:36:54
【问题描述】:

我有一个 CNN,它在几十万个示例上进行训练,一个 epoch 后的验证准确度约为 95%。这是直接的代码,使用 Keras 使用 Sequential API 定义网络。最初我在 TF 1.3 上准备并使用了这个模型。当我将它移植到 TF 2.1 并用 tensorflow.keras 替换 keras 调用时,它会快速达到约 60% 并卡在那里(似乎是很多时期),并且训练损失似乎总是收敛到相同的值。

如果我在脚本顶部添加tf.disable_v2_behavior(),它的训练方式与之前类似。

文档简单地指出“它将 TensorFlow 1.x 和 2.x 之间不同的所有全局行为切换为 1.x 的预期行为”。隐藏在 Keras API 后面,我还没有找到一个明确的答案来解释这在实践中的真正含义。为什么我应该期望一个使用 Keras 定义并使用 model.fit() 训练的 VGG 类 CNN,在没有 v2 行为的情况下也能很好地工作,但会一直失败?

编辑:disable_eager_execution() 产生相同的结果,但性能有所提高。

【问题讨论】:

    标签: tensorflow machine-learning keras deep-learning tensorflow2.0


    【解决方案1】:

    请尝试禁用急切执行,看看是否有帮助。

    tf.compat.v1.disable_eager_execution()
    

    (将其添加到脚本的顶部)

    【讨论】:

    • 是的。 disable_eager_execution() 确实 似乎提高了性能,就像disable_v2_behaviour() 一样。为什么会产生如此大的影响?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 2019-01-04
    • 2018-01-13
    • 1970-01-01
    • 2010-11-28
    相关资源
    最近更新 更多