pytorch ValueError:在将list转换为numpy数组时,只能将一个元素Tensor转换为Python标量

xienkqul  于 2022-12-23  发布在  Python
关注(0)|答案(2)|浏览(194)

我有一个图像数据集,我使用PIL和 Torch Tensor转换成Tensor在一个循环,并将它们存储在一个列表中。

def preprocess(string):
    return torch.FloatTensor(np.ascontiguousarray(np.array((PIL.Image.open(string)).convert('RGB'))[:, :, ::-1].transpose(2, 0, 1).astype(np.float32) * (1.0 / 255.0)))

import os
folder_name = 'folder name and path'
train1 = []
for item in folder_name:
    x = preprocess(item)
    train1.append(x)

现在在train之前我想使用以下命令将列表转换为np.array:

train1 = np.array(train1)

这将显示错误:

ValueError: only one element tensors can be converted to Python scalars

我还打印了列表train1的组成元素的形状和类型,发现它们是预期的Tensor。
有人能帮我吗?

js5cn81o

js5cn81o1#

从FloatTensors转换为numpy数组的方法应该是:

train1.append(x.numpy())
afdcj2ne

afdcj2ne2#

我认为这个错误可能是由于np.array处理list作为参数的方式。引擎盖下的一些东西与pytorchTensor不太匹配。
您可以先堆叠Tensor,然后在其上调用.numpy()方法。

train1 = torch.stack(train1, dim=0).numpy()

相关问题