gpt4 book ai didi

python - 在 keras 中将 'learning_phase' 用于 tensorflow 后端?

转载 作者:太空狗 更新时间:2023-10-30 01:36:26 26 4
gpt4 key购买 nike

我正在尝试在 tensorflow 中使用 keras 后端训练 resnet 网络。每次批量更新的提要字典写为:

    feed_dict= {x:X_train[indices[start:end]], y:Y_train[indices[start:end]], keras.backend.learning_phase():1}

我正在使用 keras 后端 (keras.backend.set_session(sess)),因为原始的 resnet 网络是用 keras 定义的。由于模型包含 dropout 和 batch_norm 层,它需要一个学习阶段来区分训练和测试。

我观察到,每当我设置 keras.backend.learning_phase():1 时,模型训练/测试准确度几乎不会增加到 10% 以上。相反,如果未设置学习阶段,即提要字典定义为:

feed_dict= {x:X_train[indices[start:end]], y:Y_train[indices[start:end]]}

然后正如预期的那样,模型精度以标准方式随着 epoch 不断增加。

如果有人澄清是否没有必要使用学习阶段或者是否有其他问题,我将不胜感激。 Keras 2.0 文档似乎建议使用带有 dropout 和 batch_norm 层的学习阶段。

最佳答案

将学习阶段设置为1(训练)

K.set_learning_phase(1)

那么你需要为所有的batch normalization层设置training=false

if layer.name.startswith('bn'):
layer.call(layer.input, training=False)

关于python - 在 keras 中将 'learning_phase' 用于 tensorflow 后端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49162202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com