在 Keras 中使用 Normalization 或 dropout 层进行训练时如何进行预测?

How to do predict when trained with Normalization or dropout layer in Keras?

我用归一化层训练了一个模型。代码如下:

训练阶段:

model=Sequential()
model.add()

...

k.set_learning_phase(1)
ModelCheckpoint(weights_file)
model.fit()

推理时间:

k.set_learning_phase(0)
model.load_weights(weights_file)
model.predict_classes()

...

Keras版本:2.0.8。是这样吗,还是需要一些特殊的代码来计算训练后的BN,比如在Caffe中使用SegNet?

不,在使用 BatchNormalization 或 Dropout 层时不需要做任何特殊的事情。 Keras 已经跟踪 learning/testing 阶段,所以当使用 predictpredict_classes 时,它会做正确的事情。

你甚至不需要手动设置学习阶段,Keras 已经做到了。