如何在Hugging Face Trainer中按Epoch记录训练损失以评估偏差-方差权衡
解决Hugging Face Trainer按Epoch记录训练损失的方法
要让训练损失和验证损失在每个Epoch结束时同步记录,只需要在TrainingArguments中添加**logging_strategy='epoch'**参数即可,这是官方支持的最简方案:
修改后的训练参数代码
training_arguments = TrainingArguments( output_dir = os.path.join(MODEL_DIR, f'{TODAYS_DATE}_multicls_cls'), run_name = f'{TODAYS_DATE}_multicls_cls', overwrite_output_dir=True, evaluation_strategy='epoch', save_strategy='epoch', num_train_epochs=7.0, per_device_train_batch_size=1, per_device_eval_batch_size=1, optim='adamw_torch', learning_rate=LEARNING_RATE, logging_strategy='epoch' # 核心设置:按Epoch记录训练日志 )
参数说明
logging_strategy='epoch'会覆盖默认的按步数记录逻辑,强制在每个Epoch结束时记录训练阶段的平均损失、学习率等指标。- 结合你已设置的
evaluation_strategy='epoch',每个Epoch结束后,trainer.state.log_history中会依次出现两条日志:一条是训练损失记录(包含loss、learning_rate、epoch字段),另一条是验证损失及评估指标记录(包含eval_loss、eval_f1等字段),两者严格按Epoch对应,方便你直接对比判断过拟合。
效果示例
设置后,日志历史会类似这样:
{'loss': 6.2345, 'learning_rate': 3e-05, 'epoch': 1.0, 'step': 160} {'eval_loss': 6.3463, 'eval_f1': 0.2147, ..., 'epoch': 1.0, 'step': 160} {'loss': 5.4567, 'learning_rate': 2.7e-05, 'epoch': 2.0, 'step': 320} {'eval_loss': 5.5060, 'eval_f1': 0.2382, ..., 'epoch': 2.0, 'step': 320}
这样你就能清晰追踪每个Epoch的训练/验证损失变化,当训练损失持续下降但验证损失停止下降甚至回升时,即可判断模型进入过拟合阶段。
内容的提问来源于stack exchange,提问作者Des Grieux
相关产品推荐
相关产品推荐

