【已解决】ImportError: cannot import name ‘AdamW‘ from ‘transformers.optimization‘
文章摘要:报错显示新版本transformers库已移除AdamW,导致无法导入。解决方案有两种:1) 改用PyTorch自带的AdamW(推荐),将导入语句改为from torch.optim import AdamW;2) 降级transformers至4.31.0版本。第一种方法更稳定,只需修改代码中的导入部分,其他使用AdamW的代码无需变动。文中提供了具体的导入修改示例和替换建议。(14
ImportError: cannot import name ‘AdamW’ from ‘transformers.optimization’ (C:\Users\qiaolikui.conda\envs\know\lib\site-packages\transformers\optimization.py) Process finished with exit code 1
这个报错说明:你当前安装的 transformers 版本里,已经彻底不再提供 AdamW 了,所以无论:
from transformers import AdamW
还是:
from transformers.optimization import AdamW
都会报错。
现在最稳妥的修改方法是:不用 transformers 里的 AdamW,改用 PyTorch 自带的 AdamW。
把你 main.py 里的这两行:
from transformers import BertTokenizer
from transformers.optimization import AdamW, get_linear_schedule_with_warmup
改成:
from transformers import BertTokenizer, get_linear_schedule_with_warmup
from torch.optim import AdamW
也就是最终导入部分应该类似这样:
import os
import json
import torch
import numpy as np
from config import NerConfig
from model import BertNer
from data_loader import NerDataset
from tqdm import tqdm
from seqeval.metrics import classification_report
from torch.utils.data import DataLoader
from torch.optim import AdamW
from transformers import BertTokenizer, get_linear_schedule_with_warmup
原因很简单:
你的代码里这里用了 AdamW:
optimizer = AdamW(
optimizer_grouped_parameters,
lr=args.bert_learning_rate,
eps=args.adam_epsilon
)
以前老版本 transformers 可以这样导入:
from transformers import AdamW
但是新版本已经移除了,所以现在要改成:
from torch.optim import AdamW
如果你不想改代码,也可以直接降级 transformers:
pip install transformers==4.31.0
但是我更建议你直接用上面的代码修改方法,因为 torch.optim.AdamW 是现在更稳定的写法。
你先把导入部分改成这个:
from torch.optim import AdamW
from transformers import BertTokenizer, get_linear_schedule_with_warmup
然后重新运行。
更多推荐



所有评论(0)