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

Pytorch 无法计算torch.cuda.FloatTensor的点积,pytorch,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)) 这里的向量是张量,ht是神经

我使用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))
这里的向量是张量,ht是神经网络的输出


我已经为这些事情挣扎了好几天,但仍然不知道。提前感谢您提供任何可能的解决方案

以下错误消息是什么意思

TypeError:dot接收到无效的参数组合-Get(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 tensor。请注意,
.cpu()
方法不适用于。在这种情况下,可以使用
.data.cpu()


它应该能解决你的问题。

如果我的回答能帮助你解决问题,你可以接受它。
ht = ht.cpu()