2017-07-03 33 views
1
的点积

我使用的GPU计算神经网络输出和torch.cuda.FloatTensor(两者都存储在GPU)的点积,但得到一个错误说:无法计算torch.cuda.FloatTensor

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 received an invalid combination of arguments - got (torch.cuda.FloatTensor) but expected (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() 

它应该解决您的问题。