TypeError: a float is required
TypeError: a float is required
我有一个 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: a float is required
如何将 torch 变量转换为浮点数以便能够执行这些操作?
谢谢
索引 Variable
对象不会将其转换为标量。它仍然是一个 Variable
对象。但是索引 numpy array
确实如此。因此,将 Variable
对象转换为 numpy,然后按照您希望的方式进行索引应该可以解决问题。
但是在将 Variable
转换为 numpy 时会遇到一些小问题。
如果preds
是存储在cpu内存中的Variable
,你可以简单地这样做。
nparr = preds.data.numpy()
x = nparr[4, 4]
但是,如果 preds
在 gpu 内存中,则必须先将 Variable
传输到 cpu 内存中,然后再将其转换为 numpy 对象,如下所示:
preds = preds.cpu()
然后同上。
nparr = preds.data.numpy()
x = nparr[4, 4]
在这两种情况下,x
都是一个标量(在您的情况下是一个浮点数),您可以在您选择的任何数学运算中使用它。
编辑:
是的,@mexmex 是对的,您也可以直接索引包含在 Variable
中的 tensor
以提取任何给定索引处的标量值。
像这样:
x = preds.data[4, 4]
我有一个 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: a float is required
如何将 torch 变量转换为浮点数以便能够执行这些操作?
谢谢
索引 Variable
对象不会将其转换为标量。它仍然是一个 Variable
对象。但是索引 numpy array
确实如此。因此,将 Variable
对象转换为 numpy,然后按照您希望的方式进行索引应该可以解决问题。
但是在将 Variable
转换为 numpy 时会遇到一些小问题。
如果preds
是存储在cpu内存中的Variable
,你可以简单地这样做。
nparr = preds.data.numpy()
x = nparr[4, 4]
但是,如果 preds
在 gpu 内存中,则必须先将 Variable
传输到 cpu 内存中,然后再将其转换为 numpy 对象,如下所示:
preds = preds.cpu()
然后同上。
nparr = preds.data.numpy()
x = nparr[4, 4]
在这两种情况下,x
都是一个标量(在您的情况下是一个浮点数),您可以在您选择的任何数学运算中使用它。
编辑:
是的,@mexmex 是对的,您也可以直接索引包含在 Variable
中的 tensor
以提取任何给定索引处的标量值。
像这样:
x = preds.data[4, 4]