[Bert] 提取特征之后训练模型报梯度图错误

报错:

RuntimeError: stack(): functions with out=... arguments don't support automatic differentiation, but one of the arguments requires grad.

或者

RuntimeError: Trying to backward through the graph a second time (or directly access saved tensors after they have already been freed). Saved intermediate values of the graph are freed when you call .backward() or autograd.grad(). Specify retain_graph=True if you need to backward through the graph a second time or if you need to access saved tensors after calling backward.

原因:

训练模型的时候,输入数据x,y不应该requires_grad,而bert模型输出的embeddings默认是requires_grad的,所以会报错。

解决方法:

提取完embeddings之后,使用 embeddings.detach() 解除绑定就行了。

最后的代码:

复制代码
from transformers import BertTokenizer, BertModel

class BertFeatureExtractor:
    def __init__(self):
        self.tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
        self.model = BertModel.from_pretrained('bert-base-chinese')

    def extract_features(self, text: str):
        inputs = self.tokenizer(text, return_tensors="pt")
        if len(inputs["input_ids"]) > 512:
            inputs["input_ids"] = inputs["input_ids"][:512]
            inputs["attention_mask"] = inputs["attention_mask"][:512]
        outputs = self.model(**inputs)
        return outputs.last_hidden_state[:,0,:]
    
feat = feat.detach()
相关推荐
推理幻觉21 小时前
IDE/编码代理架构与 Cursor 相关研究(汇总)
ide·人工智能·架构·agent
YangYang9YangYan21 小时前
中专服装设计专业职业发展指南
大数据·人工智能·数据分析
新智元21 小时前
AI 科学家登场!12 小时抵人类科学家半年工作量,已有 7 项大成果
人工智能·openai
新智元21 小时前
PyTorch 之父闪电离职,AI 半壁江山集体致敬!
人工智能·openai
NON-JUDGMENTAL1 天前
指令微调(Instruction Tuning)
人工智能·深度学习·机器学习
Funny_AI_LAB1 天前
深度解析Andrej Karpathy访谈:关于AI智能体、AGI、强化学习与大模型的十年远见
人工智能·计算机视觉·ai·agi
互联科技报1 天前
AI赋能企业办公:文多多AiPPT以技术创新破解行业痛点
人工智能
番石榴AI1 天前
视频转ppt/pdf V2.0版(新增转为可编辑PPT功能)
人工智能·pdf·powerpoint
c0d1ng1 天前
自建督学习——BERT(第二十二周周报)
人工智能·学习·bert
云和数据.ChenGuang1 天前
SyntaxError: Non-UTF-8 code starting
人工智能·python·numpy