Cannot convert list to array: ValueError: only one element tensors can be converted to Python scalars
Cannot convert list to array: ValueError: only one element tensors can be converted to Python scalars
我目前正在使用 PyTorch 框架并尝试理解外国代码。我遇到了索引问题,想打印列表的形状。
这样做的唯一方法(据 Google 告诉我)是将列表转换为 numpy 数组,然后使用 numpy.ndarray.shape().
获取形状
但是在尝试将我的列表转换为数组时,我得到了 ValueError: only one element tensors can be converted to Python scalars
。
我的列表是转换后的 PyTorch 张量 (list(pytorchTensor)
),看起来有点像这样:
[
tensor([[-0.2781, -0.2567, -0.2353, ..., -0.9640, -0.9855, -1.0069],
[-0.2781, -0.2567, -0.2353, ..., -1.0069, -1.0283, -1.0927],
[-0.2567, -0.2567, -0.2138, ..., -1.0712, -1.1141, -1.1784],
...,
[-0.6640, -0.6425, -0.6211, ..., -1.0712, -1.1141, -1.0927],
[-0.6640, -0.6425, -0.5997, ..., -0.9426, -0.9640, -0.9640],
[-0.6640, -0.6425, -0.5997, ..., -0.9640, -0.9426, -0.9426]]),
tensor([[-0.0769, -0.0980, -0.0769, ..., -0.9388, -0.9598, -0.9808],
[-0.0559, -0.0769, -0.0980, ..., -0.9598, -1.0018, -1.0228],
[-0.0559, -0.0769, -0.0769, ..., -1.0228, -1.0439, -1.0859],
...,
[-0.4973, -0.4973, -0.4973, ..., -1.0018, -1.0439, -1.0228],
[-0.4973, -0.4973, -0.4973, ..., -0.8757, -0.9177, -0.9177],
[-0.4973, -0.4973, -0.4973, ..., -0.9177, -0.8967, -0.8967]]),
tensor([[-0.1313, -0.1313, -0.1100, ..., -0.8115, -0.8328, -0.8753],
[-0.1313, -0.1525, -0.1313, ..., -0.8541, -0.8966, -0.9391],
[-0.1100, -0.1313, -0.1100, ..., -0.9391, -0.9816, -1.0666],
...,
[-0.4502, -0.4714, -0.4502, ..., -0.8966, -0.8966, -0.8966],
[-0.4502, -0.4714, -0.4502, ..., -0.8115, -0.8115, -0.7903],
[-0.4502, -0.4714, -0.4502, ..., -0.8115, -0.7690, -0.7690]]),
]
有没有办法在不将其转换为 numpy 数组的情况下获取该列表的形状?
您似乎有一个张量列表。对于每个张量,您可以看到它的 size()
(no need to convert to list/numpy). If you insist, you can convert a tensor to numpy array using numpy()
:
Return张量形状列表:
>> [t.size() for t in my_list_of_tensors]
Returns 一个 numpy 数组列表:
>> [t.numpy() for t in my_list_of_tensors]
就性能而言,最好避免将张量转换为 numpy 数组,因为它可能会导致 device/host 内存同步。如果你只需要检查张量的shape
,使用size()
函数。
将pytorch张量转换为numpy数组的最简单方法是:
nparray = tensor.numpy()
此外,对于大小和形状:
tensor_size = tensor.size()
tensor_shape = tensor.shape()
tensor_size
>>> (1080)
tensor_shape
>>> (32, 3, 128, 128)
一个真实世界的例子,需要处理 :
with torch.no_grad():
probs = [t.numpy() for t in my_tensors]
或
probs = [t.detach().numpy() for t in my_tensors]
我目前正在使用 PyTorch 框架并尝试理解外国代码。我遇到了索引问题,想打印列表的形状。
这样做的唯一方法(据 Google 告诉我)是将列表转换为 numpy 数组,然后使用 numpy.ndarray.shape().
但是在尝试将我的列表转换为数组时,我得到了 ValueError: only one element tensors can be converted to Python scalars
。
我的列表是转换后的 PyTorch 张量 (list(pytorchTensor)
),看起来有点像这样:
[
tensor([[-0.2781, -0.2567, -0.2353, ..., -0.9640, -0.9855, -1.0069],
[-0.2781, -0.2567, -0.2353, ..., -1.0069, -1.0283, -1.0927],
[-0.2567, -0.2567, -0.2138, ..., -1.0712, -1.1141, -1.1784],
...,
[-0.6640, -0.6425, -0.6211, ..., -1.0712, -1.1141, -1.0927],
[-0.6640, -0.6425, -0.5997, ..., -0.9426, -0.9640, -0.9640],
[-0.6640, -0.6425, -0.5997, ..., -0.9640, -0.9426, -0.9426]]),
tensor([[-0.0769, -0.0980, -0.0769, ..., -0.9388, -0.9598, -0.9808],
[-0.0559, -0.0769, -0.0980, ..., -0.9598, -1.0018, -1.0228],
[-0.0559, -0.0769, -0.0769, ..., -1.0228, -1.0439, -1.0859],
...,
[-0.4973, -0.4973, -0.4973, ..., -1.0018, -1.0439, -1.0228],
[-0.4973, -0.4973, -0.4973, ..., -0.8757, -0.9177, -0.9177],
[-0.4973, -0.4973, -0.4973, ..., -0.9177, -0.8967, -0.8967]]),
tensor([[-0.1313, -0.1313, -0.1100, ..., -0.8115, -0.8328, -0.8753],
[-0.1313, -0.1525, -0.1313, ..., -0.8541, -0.8966, -0.9391],
[-0.1100, -0.1313, -0.1100, ..., -0.9391, -0.9816, -1.0666],
...,
[-0.4502, -0.4714, -0.4502, ..., -0.8966, -0.8966, -0.8966],
[-0.4502, -0.4714, -0.4502, ..., -0.8115, -0.8115, -0.7903],
[-0.4502, -0.4714, -0.4502, ..., -0.8115, -0.7690, -0.7690]]),
]
有没有办法在不将其转换为 numpy 数组的情况下获取该列表的形状?
您似乎有一个张量列表。对于每个张量,您可以看到它的 size()
(no need to convert to list/numpy). If you insist, you can convert a tensor to numpy array using numpy()
:
Return张量形状列表:
>> [t.size() for t in my_list_of_tensors]
Returns 一个 numpy 数组列表:
>> [t.numpy() for t in my_list_of_tensors]
就性能而言,最好避免将张量转换为 numpy 数组,因为它可能会导致 device/host 内存同步。如果你只需要检查张量的shape
,使用size()
函数。
将pytorch张量转换为numpy数组的最简单方法是:
nparray = tensor.numpy()
此外,对于大小和形状:
tensor_size = tensor.size()
tensor_shape = tensor.shape()
tensor_size
>>> (1080)
tensor_shape
>>> (32, 3, 128, 128)
一个真实世界的例子,需要处理
with torch.no_grad():
probs = [t.numpy() for t in my_tensors]
或
probs = [t.detach().numpy() for t in my_tensors]