PyTorch DataLoader
需要一个DataSet
,你可以在查看文档 。正确的方法是使用:
torch.utils.data.TensorDataset(*tensors)
这是用于包装张量的数据集,其中每个样本将通过沿第一维索引张量来检索。参数*tensors
量表示具有与第一维相同大小的张量。
另一个class torch.utils.data.Dataset
是一个抽象类。
这是将numpy数组转换为张量的方法:
import torch
import numpy as np
n = np.arange(10)
print(n) #[0 1 2 3 4 5 6 7 8 9]
t1 = torch.Tensor(n) # as torch.float32
print(t1) #tensor([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
t2 = torch.from_numpy(n) # as torch.int32
print(t2) #tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=torch.int32)
可接受的答案使用了torch.Tensor
构造。如果您的图像像素在0-255之间,则可以使用以下方法:
timg = torch.from_numpy(img).float()
或torchvision to_tensor
方法,该方法将PIL图像或numpy.ndarray转换为张量。
但是,这里有一个小技巧,您可以直接放置numpy数组。
x1 = np.array([1,2,3])
d1 = DataLoader( x1, batch_size=3)
这也可以,但是如果您打印d1.dataset
类型:
print(type(d1.dataset)) # <class 'numpy.ndarray'>
虽然我们实际上需要Tensors才能使用CUDA,所以最好使用Tensors来DataLoader
。
0
我有一个庞大的numpy数组列表,其中每个数组代表一个图像,我想使用torch.utils.data.Dataloader对象加载它。但是torch.utils.data.Dataloader的文档提到它直接从文件夹加载数据。如何为我的原因修改它?我是pytorch的新手,任何帮助将不胜感激。我的单个图像的numpy数组看起来像这样。该图像是RBG图像。