dropout():参数“输入”(位置 1)必须是张量,而不是在使用 Bert 和 Huggingface 时的 str

Tas*_*nhu 17 pytorch bert-language-model

我的代码运行良好,当我今天尝试在不更改任何内容的情况下运行它时,出现以下错误:

dropout(): 参数“输入”(位置 1)必须是张量,而不是 str

如果可以提供帮助,将不胜感激。可能是数据加载器的问题?

小智 30

如果您使用 HuggingFace,此信息可能会很有用。我有同样的错误,并在dropout之前在模型类中添加参数return_dict=False修复它:输出 = 模型(**输入,return_dict = False)


小智 20

如果您使用的是 Hugging Face 变压器库,则在变压器 v4 库上运行以 v3 编写的代码时会弹出此错误。要解决这个问题,只需return_dict=False在加载模型时添加如下:

model = BertModel.from_pretrained("bert-base-cased")
outputs = model(**inputs, return_dict=False)
Run Code Online (Sandbox Code Playgroud)

或者

model = BertModel.from_pretrained("bert-base-cased", return_dict=False)
outputs = model(**inputs)
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。这对我有用。

参考: https: //huggingface.co/transformers/migration.html


小智 6

我也在研究同一个 repo。有一个可能名为 Bert_Arch 的类继承了 nn.Module,这个类有一个名为 forward 的重写方法。在 forward 方法中,只需将参数 'return_dict=False' 添加到 self.bert() 方法调用中。代替

_, cls_hs = self.bert(sent_id, attention_mask=mask)
Run Code Online (Sandbox Code Playgroud)

_, cls_hs = self.bert(sent_id, attention_mask=mask, return_dict=False)
Run Code Online (Sandbox Code Playgroud)