[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()
相关推荐
eyexin20183 分钟前
华为atlas800T 算力服务器基础环境搭建指南-910b算力卡
运维·服务器·人工智能
IT_陈寒5 分钟前
Java并发编程避坑指南:5个常见的CompletableFuture性能陷阱及解决方案
前端·人工智能·后端
gorgeous(๑>؂<๑)6 分钟前
【中国科学技术大学-傅雪阳组-ICCV25】解耦重构:通过主动特征解纠缠与可逆融合实现高质量超高清图像修复
人工智能·重构
●VON8 分钟前
智启未来:人工智能如何重塑高等教育新生态
人工智能·学习·制造·von
简简单单OnlineZuozuo9 分钟前
设计共情:面向真实系统的人本AI模式
人工智能·microsoft·架构·图像识别·banana·the stanford ai
高洁019 分钟前
【无标题】
人工智能·深度学习·算法·机器学习·transformer
菩提祖师_11 分钟前
基于Elasticsearch的全文检索系统优化
大数据·开发语言·深度学习·搜索引擎
Coder_Boy_19 分钟前
基于SpringAI企业级智能教学考试平台全流程图示化总结:架构、协同与逻辑闭环
人工智能·spring boot·spring cloud
许泽宇的技术分享23 分钟前
打破AI调用壁垒:Antigravity Tools如何用Rust+Tauri重构你的AI工作流
人工智能·重构·rust
、BeYourself25 分钟前
Spring AI ETL Pipeline Transformers 详细指南
人工智能·spring·etl·springai