我正在尝试使用keras后端在tensorflow中训练一个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]]}
然后,如预期的那样,模型精度以标准的方式随着历元而保持增加。
如果有人澄清是否没有必要使用学习阶段,或者其他什么地方不对,我将不胜感激。Keras 2.0文档似乎建议使用带有dropout和batch_norm层的学习阶段。
1条答案
按热度按时间w1jd8yoj1#
将学习阶段设置为1(培训)
然后,您需要为所有批处理归一化图层设置training=false