使用JSON数据集微调BERT做NER时,调用loss.backward()报属性错误
解决BERT微调NER时的
TokenClassifierOutput无backward属性问题 问题根源是你把模型返回的整个TokenClassifierOutput对象当作loss来调用backward()了。新版本Hugging Face Transformers库中,模型传入labels参数后返回的是一个包含多字段的结构化对象,而非单独的loss张量。
修改代码即可解决:
outputs = model(b_input_ids, token_type_ids=None, attention_mask=b_input_mask, labels=b_labels) # 从返回对象中提取loss张量 loss = outputs.loss # backward pass loss.backward()
- 补充说明:当模型接收
labels参数时,会返回TokenClassifierOutput实例,其中包含loss(可反向传播的损失张量)、logits(模型原始输出)等属性。旧版本可能直接返回loss,但新版本统一采用结构化对象返回结果,因此必须先提取loss属性再执行反向传播操作。
内容的提问来源于stack exchange,提问作者Amal Bakhsh
相关产品推荐
相关产品推荐

