TensorFlow Keras训练模型时如何每10个epoch打印一行日志
实现方案
Keras内置的verbose参数仅支持0(静默)、1(动态进度条)、2(逐epoch打印)三种模式,没有提供间隔N轮打印日志的配置,通过自定义轻量回调即可实现需求,具体操作如下:
- 第一步:将
fit方法的verbose参数设为0,关闭默认的逐epoch日志输出,避免冗余打印 - 第二步:自定义日志回调类,仅在轮次为设定间隔的整数倍时,按原有格式输出训练、验证指标
- 第三步:将自定义回调实例传入
fit方法的callbacks参数列表,启动训练即可
完整代码示例
import tensorflow as tf # 自定义间隔打印日志的回调 class IntervalEpochLogger(tf.keras.callbacks.Callback): def __init__(self, print_interval=10): super().__init__() self.interval = print_interval def on_epoch_end(self, epoch, logs=None): # Keras内部epoch从0开始计数,+1对齐常规认知的轮次编号 current_epoch = epoch + 1 # 非间隔轮次直接跳过,不打印 if current_epoch % self.interval != 0: return # 兼容新旧版本Keras的指标字段名 train_loss = logs.get('loss') train_acc = logs.get('accuracy', logs.get('acc')) val_loss = logs.get('val_loss') val_acc = logs.get('val_accuracy', logs.get('val_acc')) # 对齐原有日志格式输出 print(f"\nEpoch {current_epoch}/{self.params['epochs']}") print(f"0s - loss: {train_loss:.4f} - acc: {train_acc:.4f} - val_loss: {val_loss:.4f} - val_acc: {val_acc:.4f}") # 修改后的fit调用 model.fit( X, y, epochs=40, batch_size=32, validation_split=0.2, verbose=0, # 关闭默认日志 callbacks=[IntervalEpochLogger(print_interval=10)] )
注:如果需要调整打印间隔,修改初始化
IntervalEpochLogger时传入的print_interval数值即可,比如传入5就会每5个epoch打印一次日志。
内容的提问来源于stack exchange,提问作者Dushi Fdz
相关产品推荐
相关产品推荐

