You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 08:28:34