TensorFlow1.15+Keras2.2.5中on_batch_end/on_train_batch_end不触发求助
解决方案
1. 适配版本修正回调方法命名
在Keras 2.2.5版本中,on_train_batch_end并非官方支持的回调方法(该方法为后续版本新增),训练批次结束时触发的是on_batch_end,需在方法内判断当前是否处于训练阶段:
修改后的回调代码:
class CustomCallback(keras.callbacks.Callback): def on_train_begin(self, logs=None): print("on_train_begin") def on_batch_end(self, batch, logs=None): # 判断当前是否为训练阶段 if self.model._is_training: print("on_train_batch_end (训练批次结束)") else: print("on_batch_end (验证批次结束)")
2. 检查训练调用的参数配置
如果使用fit或fit_generator训练,需确保参数设置正确:
- 使用
fit时,确认batch_size设置合理,输入数据能被正确分割为批次 - 使用
fit_generator时,确保生成器可持续输出数据,且steps_per_epoch值大于0
3. 确认回调已正确传入训练函数
调用model.fit()或model.fit_generator()时,必须将自定义回调加入callbacks参数列表:
model.fit( x_train, y_train, batch_size=32, epochs=5, callbacks=[CustomCallback()] )
版本特性补充说明
在TensorFlow 1.15 + Keras 2.2.5的组合中,回调触发逻辑有明确版本特性:
on_train_begin:训练启动时正常触发on_batch_end:所有批次(训练/验证)结束时都会触发,需通过self.model._is_training区分阶段- 该版本暂未引入
on_train_batch_end、on_val_batch_end这类细分批次的回调方法
内容的提问来源于stack exchange,提问作者ailauli69
相关产品推荐
相关产品推荐

