gpt4 book ai didi

python - “DataLoader”对象不支持索引

转载 作者:行者123 更新时间:2023-12-04 00:02:48 27 4
gpt4 key购买 nike

我已经通过这个 pytorch api 通过设置 download=True 下载了 ImageNet 数据集。但我无法遍历数据加载器。

错误说“'DataLoader' 对象不支持索引”

trainset = torch.utils.data.DataLoader(
datasets.ImageNet('/media/farshid/DataStore/temp/Imagenet/', split='train',
download=False))
trainloader = torch.utils.data.DataLoader(trainset, batch_size=1, shuffle=False, num_workers=1)

我尝试了一种简单的方法,我只是尝试运行以下命令,
trainloader[0]

在根目录中,模式是
root/  
train/
n01440764/
n01443537/
n01443537_2.jpg

官网的文档没有说别的。 https://pytorch.org/docs/stable/torchvision/datasets.html#imagenet

我究竟做错了什么 ?

最佳答案

嗯,答案很简单(除了另一个答案中提到的错误)。

DataLoader没有 __getitem__方法 (请参阅 in the source code 自己)。

它用于对数据(或成批数据)进行迭代,而不是随机访问。如果你想访问特定的元素,你应该使用 torch.utils.data.Dataset ,在你的情况下:

trainset = torchvision.datasets.ImageNet('/media/farshid/DataStore/temp/Imagenet/', split='train', )
trainset[0]

获取一批

如果你想得到一个批次,你可以迭代它并在之后中断:
for batch in dataloader:
print(batch) # or anything else you want to do
break
DataLoader以默认或指定的方式创建随机索引(参见 samplers ),因此没有 __getitem__因为它对这个对象没有意义。

您也可以从 DataLoader 继承并创建您自己的 __getitem__功能做你想做的事(虽然更复杂)。

完整示例
# torch.utils.data.Dataset object
trainset = datasets.ImageNet('/media/farshid/DataStore/temp/Imagenet/', split='train', download=True)
# torch.utils.data.DataLoader object
trainloader =torch.utils.data.DataLoader(trainset, batch_size=1, shuffle=False)

for batch in trainloader:
print(batch)
break

上面应该打印第一批里面的东西。

关于python - “DataLoader”对象不支持索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56838341/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com