Python TypeError:需要浮点
我有一个pytorch变量:Python TypeError:需要浮点,python,math,pytorch,Python,Math,Pytorch,我有一个pytorch变量: preds[4,4] Out[305]: Variable containing: -96.7809 [torch.cuda.FloatTensor of size 1 (GPU 0)] 我想做以下几件事: import math x=preds[4,4] y=maths.exp(x) z= y / (y+1) 但是当我这样做的时候: y=maths.exp(x) 我得到以下错误: math.exp(preds[4,4]) TypeError:
preds[4,4]
Out[305]:
Variable containing:
-96.7809
[torch.cuda.FloatTensor of size 1 (GPU 0)]
我想做以下几件事:
import math
x=preds[4,4]
y=maths.exp(x)
z= y / (y+1)
但是当我这样做的时候:
y=maths.exp(x)
我得到以下错误:
math.exp(preds[4,4])
TypeError: a float is required
我如何将torch变量转换为浮点,以便能够执行这些操作
感谢索引
变量
对象不会将其转换为标量。它仍然是一个变量
对象。但是,索引numpy数组
会执行此操作。因此,将变量
对象转换为一个numpy,然后按照您希望的方式对其进行索引应该可以达到目的
但是,将变量
转换为numpy时,存在一些小缺陷
如果preds
是存储在cpu内存中的变量
,则可以简单地执行此操作
nparr = preds.data.numpy()
x = nparr[4, 4]
但是,如果preds
位于gpu内存中,则必须先将变量
传输到cpu内存中,然后再将其转换为numpy对象,如下所示:
preds = preds.cpu()
然后按照上面的步骤做
nparr = preds.data.numpy()
x = nparr[4, 4]
在这两种情况下,x
都是标量(在您的例子中是浮点),您可以在选择的任何数学运算中使用它
编辑:
是的,@mexmex是正确的,您还可以直接索引变量中包装的张量
,以提取任何给定索引处的标量值
像这样:
x = preds.data[4, 4]
为变量
对象编制索引不会将其转换为标量。它仍然是一个变量
对象。但是,索引numpy数组
会执行此操作。因此,将变量
对象转换为一个numpy,然后按照您希望的方式对其进行索引应该可以达到目的
但是,将变量
转换为numpy时,存在一些小缺陷
如果preds
是存储在cpu内存中的变量
,则可以简单地执行此操作
nparr = preds.data.numpy()
x = nparr[4, 4]
但是,如果preds
位于gpu内存中,则必须先将变量
传输到cpu内存中,然后再将其转换为numpy对象,如下所示:
preds = preds.cpu()
然后按照上面的步骤做
nparr = preds.data.numpy()
x = nparr[4, 4]
在这两种情况下,x
都是标量(在您的例子中是浮点),您可以在选择的任何数学运算中使用它
编辑:
是的,@mexmex是正确的,您还可以直接索引变量中包装的张量
,以提取任何给定索引处的标量值
像这样:
x = preds.data[4, 4]
如果直接对数据张量进行索引,那么实际上不能省去numpy转换吗?preds.data[4,4]返回一个标量。如果您直接为数据张量编制索引,那么您实际上不能省去numpy转换吗?preds.data[4,4]返回一个标量。