如何修复BERT情感分析代码中已弃用的AdamW优化器?
解决Transformers中AdamW弃用警告的两种方案
方案一:使用Trainer API(推荐,适配框架未来更新)
这是Transformers官方推荐的方式,直接通过TrainingArguments指定PyTorch原生AdamW,无需手动构建optimizer:
- 导入所需类:
from transformers import TrainingArguments, Trainer
- 配置训练参数,重点设置
optim="adamw_torch":
training_args = TrainingArguments( output_dir="./results", # 训练结果输出目录 learning_rate=1e-5, per_device_train_batch_size=8, num_train_epochs=3, optim="adamw_torch", # 指定使用PyTorch原生AdamW weight_decay=0.01, # 全局权重衰减,如需针对不同参数设置不同衰减可参考进阶配置 )
- 初始化Trainer并启动训练:
trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, # 你的训练数据集 eval_dataset=eval_dataset, # 可选,验证数据集 ) trainer.train()
如果需要针对bias、gamma这类参数设置无衰减的权重策略,可以通过model_init自定义模型参数分组后传入Trainer,大部分场景下全局权重衰减设置已能满足需求。
方案二:手动使用PyTorch原生AdamW(自定义训练循环)
你之前的尝试失败有两个核心问题:导入了第三方torch_optimizer库,且参数名用错(PyTorch原生AdamW用weight_decay而非weight_decay_rate)。修正后的代码如下:
- 修正导入语句:
# 删除 import torch_optimizer as optim import torch.optim as optim # 导入PyTorch原生优化器 # 删除 from transformers import AdamW
- 修改参数分组的键名:
param_optimizer = list(model.named_parameters()) no_decay = ['bias', 'gamma', 'beta'] optimizer_grouped_parameters = [{ 'params': [p for n, p in param_optimizer if not any(nd in n for nd in no_decay)], 'weight_decay': 0.01 # 将 weight_decay_rate 改为 weight_decay }, { 'params': [p for n, p in param_optimizer if any(nd in n for nd in no_decay)], 'weight_decay': 0.0 }]
- 创建PyTorch原生AdamW优化器:
optimizer = optim.AdamW(optimizer_grouped_parameters, lr=1e-5)
修改后即可彻底消除弃用警告,同时使用PyTorch官方维护的AdamW实现。
内容的提问来源于stack exchange,提问作者Panco
相关产品推荐
相关产品推荐

