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
相关产品推荐
相关产品推荐

