我使用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是神经网络的输出。
我已经挣扎了好几天,但仍然不知道。提前感谢任何可能的解决方案!
答案 0 :(得分:3)
以下错误消息是什么意思?
TypeError:dot收到一个无效的参数组合 - got(torch.cuda.FloatTensor)但是期望(torch.FloatTensor tensor)。
这意味着点函数预期 cpu 张量,但是你提供的是 gpu(cuda)张量。
那么,如何解决你的代码问题?
p = torch.exp(vector.dot(ht))
正如您所提到的,vector
是FloatTensor,因此ht
也应该是FloatTensor,但ht
是cuda.FloatTensor
(因为,您的神经网络模型是在gpu中存储器)。
因此,您应该通过执行以下操作将vector
转换为cuda.FloatTensor。
vector = vector.cuda()
或者,您可以通过执行以下操作将cuda.FloatTensor
转换为cpu张量。请注意,.cpu()
方法不适用于Variable。在这种情况下,您可以使用.data.cpu()
。
ht = ht.cpu()
它应该可以解决你的问题。