为LIMU-BERT添加adapters遇错误:AdapterConfig不识别mh_adapter参数
问题描述
我正在为面向IMU数据的轻量级模型LIMU-BERT集成adapters,已在数据集A上完成LIMU-BERT的预训练,计划在数据集B上微调adapters。编写的adapters添加代码如下:
import adapters class AdapterBERTClassifier(nn.Module): def __init__(self, bert_cfg, classifier=None): super().__init__() self.limu_bert = LIMUBertModel4Pretrain(bert_cfg, output_embed=True) self.classifier = classifier # Add adapter adapter_config = adapters.AdapterConfig( mh_adapter=True, output_adapter=True, reduction_factor=16, non_linearity="relu" ) self.limu_bert.add_adapter("classification_adapter", config=adapter_config) self.limu_bert.train_adapter("classification_adapter")
但运行时触发如下错误:
Traceback (most recent call last): File "D:\Documents\Code\LIMU-BERT\classifier_adapter.py", line 71, in <module> label_test, label_estimate_test = bert_classify(args, args.label_index, train_rate, label_rate, balance=balance) File "D:\Documents\Code\LIMU-BERT\classifier_adapter.py", line 37, in bert_classify model = AdapterBERTClassifier(model_bert_cfg, classifier=classifier) File "D:\Documents\Code\LIMU-BERT\models.py", line 332, in __init__ adapter_config = adapters.AdapterConfig( TypeError: AdapterConfig.__init__() got an unexpected keyword argument 'mh_adapter'
当前adapters包版本为1.0.1,根据官方文档AdapterConfig类应包含mh_adapter参数,请问该问题的原因是什么?如何解决?
原因分析
adapters库版本迭代中存在参数命名变更,1.0.1版本里mh_adapter参数已被重命名为self_attn_adapter,你参考的文档对应版本高于当前使用的1.0.1,因此出现参数不匹配的报错。
解决方法
有两种可行方案:
- 方案一:适配当前1.0.1版本的参数命名,将代码中的
mh_adapter=True替换为self_attn_adapter=True,修改后的配置代码如下:
adapter_config = adapters.AdapterConfig( self_attn_adapter=True, output_adapter=True, reduction_factor=16, non_linearity="relu" )
- 方案二:升级adapters库到支持
mh_adapter参数的版本(通常为2.0及以上),执行升级命令:
pip install -U adapters
升级后可直接使用原代码中的mh_adapter参数。
内容的提问来源于stack exchange,提问作者555wen
相关产品推荐
相关产品推荐

