我正在尝试在张量流中使用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定义的。由于模型包含辍学层和batch_norm层,因此需要一个学习阶段来区分训练和测试。
我观察到,无论何时设置keras.backend.learning_phase():1
,模型训练/测试的准确性几乎都不会提高到10%以上。相反,如果未设置学习阶段,则将提要字典定义为:
feed_dict= {x:X_train[indices[start:end]], y:Y_train[indices[start:end]]}
然后,正如预期的那样,模型精度以标准的方式不断提高。
如果有人澄清了学习阶段的使用是不必要的还是其他错误,我将不胜感激。Keras 2.0文档似乎建议将学习阶段与dropout和batch_norm层一起使用。