如何实现每10个Epoch输出一次性能指标?含训练代码场景
解决Keras训练时每10个Epoch输出信息的问题
嘿,这俩问题本质上是一回事儿,都是要控制训练过程中日志的输出频率对吧?我给你两种靠谱的解决办法,推荐第一种,更符合Keras的最佳实践~
方法一:自定义回调函数(推荐)
Keras自带的fit方法默认的输出模式要么太频繁要么太简洁,咱们可以通过自定义回调类来精准控制每10个Epoch输出一次信息。这种方式不用自己写循环,Keras会自动帮你在每个Epoch结束时触发回调逻辑。
具体步骤:
- 导入Keras的回调基类
- 定义一个继承自
Callback的自定义日志类,重写on_epoch_end方法来判断是否是第10、20...个Epoch,然后输出指标 - 在
model.fit里加入这个回调即可
修改后的完整代码如下:
from tensorflow.keras.callbacks import Callback # 自定义每10个Epoch输出的回调类 class TenEpochLogger(Callback): def on_epoch_end(self, epoch, logs=None): # 注意Keras里的epoch参数是从0开始计数的,所以实际Epoch数要+1 if (epoch + 1) % 10 == 0: print(f"\n=== Epoch {epoch+1} 训练结束 ===") # 遍历logs里的所有指标(比如loss、accuracy等,取决于你模型编译时的设置) for metric_name, metric_value in logs.items(): print(f" {metric_name}: {metric_value:.4f}") # 你的原有代码,加上回调参数 model = baseline_model() # 实例化自定义回调 epoch_logger = TenEpochLogger() # fit时传入callbacks,同时设置verbose=0关闭默认输出(避免重复打印) model.fit(X_train, y_train, epochs=50, callbacks=[epoch_logger], verbose=0) y_pred = model.predict(X)
这样设置后,每完成10个Epoch,就会清晰地打印出该Epoch对应的所有性能指标,完全符合你的需求~
方法二:手动分批次训练(备选)
如果你更习惯自己写循环控制训练节奏,也可以把50个Epoch拆成5次,每次训练10个Epoch,然后手动评估并输出指标:
model = baseline_model() total_epochs = 50 batch_epochs = 10 for start_epoch in range(0, total_epochs, batch_epochs): # 训练10个Epoch,initial_epoch确保接着上一次的进度继续训练 model.fit(X_train, y_train, epochs=start_epoch + batch_epochs, initial_epoch=start_epoch, verbose=0) # 评估并输出当前训练后的指标 current_epoch = start_epoch + batch_epochs print(f"\n=== 完成第{current_epoch}个Epoch训练 ===") # 这里的评估指标要和你模型编译时的metrics对应,比如loss和accuracy loss, accuracy = model.evaluate(X_train, y_train, verbose=0) print(f" loss: {loss:.4f}, accuracy: {accuracy:.4f}") y_pred = model.predict(X)
这种方式也能实现需求,但相比回调函数,代码会更繁琐一点,而且需要手动处理评估逻辑,所以更推荐第一种回调的方式。
内容的提问来源于stack exchange,提问作者Sir Cappery
相关产品推荐
相关产品推荐

