Keras自定义train_step函数在model.fit调用时打印无输出问题问询
问题原因及解决方法
核心原因
你为train_step添加的@tf.function装饰器会将函数转换为TensorFlow静态计算图执行,Python原生的print属于Python侧运行时逻辑,仅会在首次调用函数、构建静态图的阶段执行一次,后续训练阶段直接运行已构建完成的静态图,不会再触发print逻辑,因此看不到打印输出。
结合你提到的模型可以正常训练的现象,可以确定自定义的train_step已经被model.fit正确调用,不存在调用失效的问题,也不是输出到了其他不可见位置。
解决方案
- 替换Python原生
print为TensorFlow内置的tf.print:tf.print会作为算子被嵌入到静态计算图中,每次图执行阶段都会正常输出张量的实际运行值到控制台。 - 调试阶段可临时注释掉
@tf.function装饰器:此时train_step会以普通Python函数模式运行,原生print也可以正常输出,调试完成后再加回装饰器即可恢复训练性能。
内容的提问来源于stack exchange,提问作者wuannnn
相关产品推荐
相关产品推荐

