使用Hugging Face Transformers编写自定义回调:GPT-2训练epoch结束无输出
GPT-2微调自定义Epoch回调不生效的解决方法
问题根源及修复步骤:
- 回调传入错误:Trainer的
callbacks参数需要接收回调类的实例,而非类本身。你当前传入的是类对象my_callback,需改为实例my_callback()。 - 方法签名不完整:
TrainerCallback的on_epoch_end方法必须包含control参数,否则框架无法正确触发该回调。同时建议保留**kwargs以兼容版本更新。
修正后的完整代码:
自定义回调类
from transformers import TrainerCallback, TrainingArguments, TrainerState, TrainerControl class my_callback(TrainerCallback): def on_epoch_end( self, args: TrainingArguments, state: TrainerState, control: TrainerControl, model=None, tokenizer=None, **kwargs ): print(f"Epoch {state.epoch} has ended.")
Trainer初始化
trainer = Trainer( model=model, args=training_args, data_collator=data_collator, train_dataset=train_dataset, eval_dataset=test_dataset, callbacks=[my_callback()] # 传入回调实例 )
修改后,每个训练epoch结束时就会正常打印提示信息。如果需要扩展功能(比如保存中间模型、计算自定义指标),可以在on_epoch_end方法中利用model、state等参数实现对应逻辑。
内容的提问来源于stack exchange,提问作者Xavxavxav
相关产品推荐
相关产品推荐

