You need to enable JavaScript to run this app. PyTorch训练BERT模型报TypeError: string indices must be integers如何解决
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch训练BERT模型报TypeError: string indices must be integers如何解决

问题修复方案

核心报错原因

你的报错出现在hidden_states = hidden_states[-1][:, 0]这一行,此时hidden_states是字符串而非预期的隐藏状态列表,触发字符串索引必须为整数的类型错误,由两个代码问题共同导致:

  1. forward方法缩进错误:你定义的forward函数和Transformer类同级,没有被包含在类内部,调用模型时实际执行的是nn.Module父类的默认空forward方法,返回值不符合预期;
  2. BertModel返回值处理错误:新版transformers库的Bert类模型默认return_dict=True,返回的是类字典的输出对象而非元组,你用元组解包的写法会把输出的键名字符串赋值给hidden_states变量。

修复步骤

  1. 修正缩进,把整个forward函数缩进,放到Transformer类内部。
  2. 修改forward方法中BertModel的调用逻辑,二选一即可:
    • 方式1:添加return_dict=False参数,保持原有元组解包逻辑:
    _, _, hidden_states = self.transformer(
        tokens, attention_mask=(tokens > 0).long(),
        return_dict=False
    )
    
    • 方式2:直接用输出对象的属性取隐藏状态,代码可读性更高:
    outputs = self.transformer(
        tokens, attention_mask=(tokens > 0).long()
    )
    hidden_states = outputs.hidden_states
    
  3. 可选优化:你当前是从配置文件随机初始化Bert权重,没有加载预训练参数,训练效果会很差,建议把self.transformer = BertModel(bert_config)修改为加载预训练权重的写法:
    self.transformer = BertModel.from_pretrained(pretrained_weights, config=bert_config)
    

内容的提问来源于stack exchange,提问作者Ishan Dutta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 16:27:01