无法计算torch.cuda.FloatTensor的点积

时间:2017-07-03 07:16:35

标签: pytorch

我使用GPU来计算神经网络输出的点积和torch.cuda.FloatTensor(两者都存储在GPU中)但是出错了:

TypeError: dot received an invalid combination of arguments - got (torch.cuda.FloatTensor) but expected (torch.FloatTensor tensor).

代码就像

p = torch.exp(vector.dot(ht))

这里的矢量是火炬FloatTensor,而ht是神经网络的输出。

我已经挣扎了好几天,但仍然不知道。提前感谢任何可能的解决方案!

1 个答案:

答案 0 :(得分:3)

以下错误消息是什么意思?

  

TypeError:dot收到一个无效的参数组合 - got(torch.cuda.FloatTensor)但是期望(torch.FloatTensor tensor)。

这意味着点函数预期 cpu 张量,但是你提供的是 gpu(cuda)张量。

那么,如何解决你的代码问题?

p = torch.exp(vector.dot(ht))

正如您所提到的,vector是FloatTensor,因此ht也应该是FloatTensor,但htcuda.FloatTensor(因为,您的神经网络模型是在gpu中存储器)。

因此,您应该通过执行以下操作将vector转换为cuda.FloatTensor。

vector = vector.cuda()

或者,您可以通过执行以下操作将cuda.FloatTensor转换为cpu张量。请注意,.cpu()方法不适用于Variable。在这种情况下,您可以使用.data.cpu()

ht = ht.cpu()

它应该可以解决你的问题。