【问题标题】:Tuple of Tensors张量元组
【发布时间】:2021-10-06 14:51:21
【问题描述】:

我最近问了这个问题的一部分。我正在构建一个聊天机器人,并且有一个功能会产生问题。函数如下:

def variable_from_sentence(sentence):
  vec, length = indexes_from_sentence(sentence)
  inputs = [vec]
  lengths_inputs = [length]
  if hp.cuda:
    batch_inputs = Variable(torch.stack(torch.Tensor(inputs),1).cuda())
  else:
    batch_inputs = Variable(torch.stack(torch.Tensor(inputs),1))
  return batch_inputs, lengths_inputs

但是当我尝试运行聊天机器人代码时,它给了我这个错误:

stack(): 参数“张量”(位置 1)必须是张量的元组,而不是张量

出于这个原因,我修复了这样的功能:

def variable_from_sentence(sentence):
  vec, length = indexes_from_sentence(sentence)
  inputs = [vec]
  lengths_inputs = [length]
  if hp.cuda:
    batch_inputs = torch.stack(inputs, 1).cuda()
  else:
    batch_inputs = torch.stack(inputs, 1)
  return batch_inputs, lengths_inputs

但它仍然给我错误,错误是这样的:

TypeError:预期张量作为参数 0 中的元素 0,但得到了列表

在这种情况下我现在该怎么办?

【问题讨论】:

  • 请不要复制您自己的question。您已经在那里收到了答复,但没有等待对您的评论进行后续处理。相反,您应该取消删除并编辑最初的帖子,解释提供的答案不适用的内容。
  • @Ivan 对不起,伙计。我还在学习这个社区的规则。你能在这里解释一下解决方案吗?
  • veclength有哪些类型?
  • @Ivan 长度必须是整数,我不确定 vec 。
  • @Ivan 我查过了。它们都是整数

标签: pytorch tuples tensor


【解决方案1】:

由于veclength都是整数,所以可以直接使用torch.tensor

def variable_from_sentence(sentence):
    vec, length = indexes_from_sentence(sentence)
    inputs = [vec]
    lengths_inputs = [length]
    if hp.cuda:
        batch_inputs = torch.tensor(inputs, device='cuda')
    else:
        batch_inputs = torch.tensor(inputs)
    return batch_inputs, lengths_inputs

【讨论】:

  • 谢谢伙计。如果 vec= list 的类型和 length= int 的类型,您能否提供解决方案?
  • 那么你会做torch.tensor(vec)torch.tensor([length])
  • 所以它会是这样的:- inputs= torch.tensor(vec) 和 length_inputs = torch.tensor([length]) 。像这样?
  • 确实,torch.tensor 需要一个 listtuple
  • 谢谢伙计。我很感激你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多