TensorFlow人脸情绪识别Callback未终止训练问题求助
问题排查与解决:TensorFlow回调未终止训练
嘿,我帮你找到了问题的根源!你的代码逻辑基本没问题,但有个非常容易忽略的拼写错误,导致模型没法在准确率达标时停止训练。
核心问题:拼写错误的回调属性
在你定义的myCallback类的on_epoch_end方法里,有一行代码写错了:
self.model.stop_traning = True
这里的stop_traning应该是stop_training(注意是training,不是traning,少了一个字母i)。TensorFlow的模型回调依赖stop_training这个内置属性来触发训练终止,拼写错误后,这个属性不会被正确识别,所以哪怕你打印了提示信息,模型也不会执行停止操作。
修正后的Callback类
把拼写错误改过来就可以了,同时可以优化一下提示信息,方便你直观看到当前准确率:
class myCallback(tf.keras.callbacks.Callback): def on_epoch_end(self, epoch, logs={}): # 这里参数名规范为epoch(单数),不影响功能但更贴合TensorFlow签名 current_acc = logs.get('accuracy') if current_acc > DESIRED_ACCURACY: print(f'\n当前准确率达到{current_acc:.4f},超过目标值{DESIRED_ACCURACY},终止训练!') self.model.stop_training = True # 修正拼写错误
额外的小提示
- 可以在判断时打印当前准确率,方便你调试过程中实时观察训练进度。
- 你的模型结构、数据生成器配置以及训练流程都是正确的,修正拼写问题后就能正常触发终止逻辑了。
验证效果
修正后,当训练过程中准确率超过0.999时,模型会立即停止训练,同时输出预设的提示信息,完全符合你的预期。
内容的提问来源于stack exchange,提问作者user14190332
相关产品推荐
相关产品推荐

