[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()
相关推荐
李尚朋20215 分钟前
搜嗖工具箱|小众有个性的趣味网站合集
深度学习·搜索引擎·游戏引擎
2501_941507946 分钟前
YOLO11-C3k2-ODConv玻璃缺陷检测与分类任务详解
人工智能·分类·数据挖掘
2501_941837266 分钟前
财务文档类型识别与分类 _ 基于改进YOLO11-C2PSA-EDFFN模型的文档智能识别系统
人工智能·分类·数据挖掘
qunaa01017 分钟前
改进YOLOv5结合SwinTransformer实现青香蕉手指部分自动识别与分类
人工智能·yolo·分类
巫婆理发2229 分钟前
Keras简介
人工智能·深度学习·keras
Serverless 社区10 分钟前
进阶指南:BrowserUse + Agentrun Sandbox 最佳实践指南
人工智能·云原生·serverless
min18112345613 分钟前
AI从工具向自主决策者的身份转变
大数据·网络·人工智能·架构·流程图
~~李木子~~14 分钟前
从“待整理”到“全库清单”:一套可自进化的本地书籍整理脚本实践
大数据·人工智能
人工智能培训15 分钟前
如何持续、安全地向大模型注入新知识?
人工智能·python·算法·大模型·大模型学习·大模型应用工程师·大模型工程师证书
密瓜智能20 分钟前
面向算力虚拟化的开源探索:如何看待 Flex:ai,以及为什么工程交付如此重要
人工智能·开源