PyTorch搭建聊天机器人时torch.stack报tuple of Tensors错误如何解决
报错根因与修复方案
报错原因梳理
- 第一次报错:
torch.stack的首个入参要求是由张量构成的列表/元组,初始代码传入torch.Tensor(inputs)生成的单个张量,不符合参数要求,触发类型错误。 - 第二次报错:
indexes_from_sentence返回的vec为列表类型,未提前转为张量就被放入inputs列表传入torch.stack,列表元素不符合张量要求,触发新的类型错误。另外PyTorch 0.4及之后版本Variable已与张量合并,无需额外用Variable包裹张量。
修复后的代码
def variable_from_sentence(sentence): vec, length = indexes_from_sentence(sentence) # 先将列表类型的vec转为张量,再放入列表供stack处理 inputs = [torch.tensor(vec)] lengths_inputs = [length] batch_inputs = torch.stack(inputs, 1) if hp.cuda: batch_inputs = batch_inputs.cuda() return batch_inputs, lengths_inputs
补充说明
如果你的PyTorch版本低于0.4必须保留Variable,只需将stack生成的结果用Variable()包裹即可,不要改动传入stack的参数结构。生成张量时建议使用torch.tensor()而非torch.Tensor(),前者会自动匹配输入数据的类型,后者默认生成float32类型张量,与索引类数据常用的int64类型不匹配,容易引发后续运算报错。
内容的提问来源于stack exchange,提问作者user14570244
相关产品推荐
相关产品推荐

