如何用HuggingFace Trainer展示训练与验证集损失对比
如何让Hugging Face Trainer同时显示训练与验证损失
你已经添加了eval_dataset,但还需要在TrainingArguments里配置评估触发策略和评估间隔,才能让Trainer自动计算并输出验证集损失。具体修改如下:
关键参数调整
- 添加
evaluation_strategy:指定评估的触发时机,可选值包括"no"(默认,不执行评估)、"steps"(每隔指定步数评估)、"epoch"(每个epoch结束后评估)。由于你的训练用max_steps控制时长,推荐使用"steps"。 - 添加
eval_steps:配合evaluation_strategy="steps"使用,指定每隔多少步执行一次验证集评估,建议和logging_steps保持一致(比如设为1),这样每次日志都会同步输出训练与验证损失。 - 可选确认:
logging_strategy默认值为"steps",无需额外修改,确保日志能及时输出评估结果。
修改后的完整脚本
# modified training script trainer = transformers.Trainer( model=model, train_dataset=train_dataset, eval_dataset=test_dataset, # 保留验证集配置 args=transformers.TrainingArguments( num_train_epochs=2, per_device_train_batch_size=1, gradient_accumulation_steps=1, warmup_ratio=0.05, max_steps=20, learning_rate=2e-4, fp16=True, logging_steps=1, output_dir="outputs", optim="paged_adamw_8bit", lr_scheduler_type='cosine', # 新增评估相关参数 evaluation_strategy="steps", # 按训练步数触发验证集评估 eval_steps=1, # 每完成1步训练就评估一次验证集 ), data_collator=transformers.DataCollatorForLanguageModeling(tokenizer, mlm=False), ) model.config.use_cache = False # 训练时关闭缓存避免警告,推理阶段需重新开启!
效果说明
修改后运行脚本,日志中会同时出现train_loss(训练集损失)和eval_loss(验证集损失),示例日志如下:
{'loss': 2.345, 'learning_rate': 2e-04, 'epoch': 0.01}
{'eval_loss': 2.456, 'eval_runtime': 0.123, 'eval_samples_per_second': 8.0, 'epoch': 0.01}
这样你就能清晰对比训练与验证集的损失变化趋势。
内容的提问来源于stack exchange,提问作者Ronan McGovern
相关产品推荐
相关产品推荐

