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

Huggingface Trainer设置num_train_epochs无效始终仅训练3轮排查

问题原因

配置不生效的核心原因是重复初始化training_args变量,覆盖了之前设置好10轮训练的配置:

  • 你第一次创建TrainingArguments实例时,确实正确设置了num_train_epochs=10,但在后续代码块中,又重新执行了training_args = TrainingArguments(output_dir="test_trainer", evaluation_strategy="epoch")
  • 新初始化的TrainingArguments实例没有手动指定num_train_epochs参数,会使用Transformers框架的默认值3,因此传入Trainer的实际配置就是3轮训练,和你最开始的预期不符。
  • 训练启动日志里打印的Num Epochs = 3也能佐证,Trainer实际拿到的配置就是默认的3轮。
修复方案

删除重复定义training_args的代码行,把所有需要的训练参数统一合并到第一次的TrainingArguments初始化逻辑中,不要重复给同名变量赋值覆盖配置。修正后的核心代码如下:

import numpy as np
from transformers import TrainingArguments, Trainer
from datasets import load_metric

# 所有训练参数统一在此处配置,不要后续重复初始化覆盖
training_args = TrainingArguments(
    output_dir='./results',
    num_train_epochs=10,
    per_device_train_batch_size=8,
    per_device_eval_batch_size=16,
    warmup_steps=500,
    weight_decay=0.01,
    logging_dir='./logs',
    logging_steps=10,
    evaluation_strategy="epoch" # 合并第二次配置中需要的按轮次评估策略
)

# 指标计算逻辑
metric = load_metric("accuracy")
def compute_metrics(eval_pred):
    logits, labels = eval_pred
    predictions = np.argmax(logits, axis=-1)
    return metric.compute(predictions=predictions, references=labels)

# 初始化Trainer
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets["train"],
    eval_dataset=tokenized_datasets["test"],
    data_collator=data_collator,
    tokenizer=tokenizer,
    compute_metrics=compute_metrics,
)

修改完成后重新启动训练,启动日志中的Num Epochs字段会显示为10,总优化步数也会对应提升,训练会正常跑完10轮后终止。

补充提示:从你贴出的训练日志看,第3轮的验证损失已经高于第2轮,说明模型已经开始出现过拟合趋势,即使将训练轮次拉到10轮,也建议搭配早停回调使用,避免无意义的训练消耗。

内容的提问来源于stack exchange,提问作者matrimm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:33:22