【发布时间】: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