【问题标题】:PyTorch - to NumPy yields unsized object?PyTorch - 到 NumPy 产生未调整大小的对象?
【发布时间】:2020-03-31 17:26:05
【问题描述】:
将 PyTorch 张量转换为 NumPy 我得到了
print(nn_result.shape)
# (2433, 2)
np_result = torch.argmax(nn_result).numpy()
type(np_result)
# <type 'numpy.ndarray'>
print(len(np_result))
TypeError: len() of unsized object
为什么?我认为根据文档,numpy() 函数会返回正确的ndarray,但它似乎不完整?
【问题讨论】:
标签:
numpy
pytorch
numpy-ndarray
【解决方案1】:
也许您想使用 torch.argmax(nn_result, dim=1) ?由于dim 默认为 0,它只返回一个构造为张量的数字。让我用下面的例子来说明:
>>> x = np.array(1)
>>> x.shape
()
>>> len(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: len() of unsized object
>>> x = np.array([1])
>>> x.shape
(1,)
>>> len(x)
1
基本上np.array 将占用您构造时使用的任何object 类型。在第一种情况下,object 不是一个数组,因此您看不到有效的形状。由于它不是数组调用len 会引发错误。
torch.argmax 和 dim=0 返回一个张量,如上述示例的第一种情况所示,因此会出现错误。