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 了,所以无论:
python
from transformers import AdamW
还是:
python
from transformers.optimization import AdamW
都会报错。
现在最稳妥的修改方法是:不用 transformers 里的 AdamW,改用 PyTorch 自带的 AdamW。
把你 main.py 里的这两行:
python
from transformers import BertTokenizer
from transformers.optimization import AdamW, get_linear_schedule_with_warmup
改成:
python
from transformers import BertTokenizer, get_linear_schedule_with_warmup
from torch.optim import AdamW
也就是最终导入部分应该类似这样:
python
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:
python
optimizer = AdamW(
optimizer_grouped_parameters,
lr=args.bert_learning_rate,
eps=args.adam_epsilon
)
以前老版本 transformers 可以这样导入:
python
from transformers import AdamW
但是新版本已经移除了,所以现在要改成:
python
from torch.optim import AdamW
如果你不想改代码,也可以直接降级 transformers:
bash
pip install transformers==4.31.0
但是我更建议你直接用上面的代码修改方法,因为 torch.optim.AdamW 是现在更稳定的写法。
你先把导入部分改成这个:
python
from torch.optim import AdamW
from transformers import BertTokenizer, get_linear_schedule_with_warmup
然后重新运行。