繁体   English   中英

ValueError:在将列表转换为 numpy 数组时,只能将一个元素张量转换为 Python 标量

[英]ValueError: only one element tensors can be converted to Python scalars while converting list to numpy array

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

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)

现在在训练之前,我想使用以下方法将列表转换为 np.array:

train1 = np.array(train1)

这显示了错误:

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

我还打印了列表 train1 的组成部分的形状和类型,发现它们是预期的张量。

任何人都可以帮我吗?

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

train1.append(x.numpy())

我认为该错误可能是由于np.arraylist处理为 arguments 的方式。 go 与 pytorch 张量不匹配。

相反,您可以先堆叠张量并在其上调用.numpy()方法。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM