TensorFlow模型训练如何设置每隔x个epoch输出训练日志
TensorFlow按指定间隔输出训练日志实现方案
不需要使用on_batch_begin方法,按epoch间隔输出更适合通过重写回调的on_epoch_end方法实现,具体实现如下:
1. 自定义间隔日志回调
import tensorflow as tf class EpochIntervalLogger(tf.keras.callbacks.Callback): def __init__(self, interval=10): super().__init__() # 初始化输出间隔,默认10个epoch输出一次 self.interval = interval def on_epoch_end(self, epoch, logs=None): # 框架内置epoch从0开始计数,加1后匹配实际使用的第N个epoch序号 current_epoch = epoch + 1 # 匹配输出规则:第1个epoch必输,之后每间隔指定数量输出一次 if current_epoch == 1 or current_epoch % self.interval == 0: print(f"\nEpoch {current_epoch}/{self.params['epochs']}") # 可根据自己的训练指标自定义输出内容,比如有准确率就加acc、val_acc字段 print(f"loss: {logs['loss']:.4f} - val_loss: {logs['val_loss']:.4f}")
2. 修改原有训练代码
epochs = 500 # 实例化回调,设置输出间隔为10 log_callback = EpochIntervalLogger(interval=10) model.fit( X_train, y_train, batch_size=16, epochs=epochs, validation_data=(X_test, y_test), # 传入自定义回调 callbacks=[log_callback], # 关闭框架默认的逐epoch输出,避免重复打印 verbose=0 )
补充说明
- 如果需要保留原生训练的进度条效果,可以把
verbose参数设为1,同时在回调中重写on_epoch_begin方法动态控制日志输出开关即可 - 所有训练阶段产生的指标都存在
logs字典中,需要输出其他指标直接按键取值打印即可
内容的提问来源于stack exchange,提问作者K Split X
相关产品推荐
相关产品推荐

