python - 尝试在 Pytorch 中加载自定义数据集

标签 python machine-learning computer-vision dataset pytorch

我刚开始使用 PyTorch,不幸的是,在将我自己的训练/测试图像数据集用于自定义算法时,我有点困惑。对于初学者,我正在制作一个小型的“hello world”式卷积衬衫/ socks /裤子分类网络。我只加载了一些图像,只是确保 PyTorch 可以加载它们并将它们正确地转换为 32x32 可用图像。我的 ImageFolder 设置如下:

imgs/socks/sockimages.jpeg
imgs/pants/pantsimages.jpeg
imgs/shirt/shirtimages.jpeg

以及我的测试图像文件夹的类似设置。根据我目前的知识,PyTorch 内置的图像加载器应该从训练/测试图像中的子文件夹名称中读取标签。但是,我收到一个 TypeError 提示我的迭代器不可迭代。这是我的代码和错误:

import torch
import torchvision
import torchvision.datasets as dset
import torchvision.transforms as transforms

transform = transforms.Compose(
[transforms.ToTensor(),
 transforms.Scale((32,32)),
 transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])

trainset = dset.ImageFolder(root="imgs",transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,shuffle=True,         num_workers=2)

testset = dset.ImageFolder(root='tests',transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,shuffle=True,     num_workers=2)

classes=('shirt','pants','sock')

import matplotlib.pyplot as plt
import numpy as np

# functions to show an image
def imshow(img):
    img = img / 2 + 0.5     # unnormalize
    npimg = img.numpy()
    plt.imshow(np.transpose(npimg, (1, 2, 0)))

# get some random training images
dataiter = iter(trainloader)
images, labels = dataiter.next()

# show images
imshow(torchvision.utils.make_grid(images))
# print labels
print(' '.join('%5s' % classes[labels[j]] for j in range(4)))

错误:

TypeError: 'builtin_function_or_method' object is not iterable

它说它是在引用包含dataiter.next() 的行,这意味着编译器认为我不能迭代dataiter

求助!提前致谢,

-David Sillman,PyTorch 新手

最佳答案

我认为出现错误是因为在 transform.Compose 中,您首先执行的是 .ToTensor(),而您应该执行 .Scale() Pytorch张量PIL 图像 进行转换,不可 互换。 阅读它说的文档

class torchvision.transforms.Scale(size, interpolation=2) [...] Rescale the input PIL.Image to the given size.

当您在缩放之前将该图像更改为 Pytorch 张量从而使其崩溃时。

应该改为:

transform = transforms.Compose(
                   [transforms.Scale((32,32)),
                    transforms.ToTensor(),
                    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])

在张量上应用 PIL Image 转换时会出现此错误。

关于python - 尝试在 Pytorch 中加载自定义数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43441673/

相关文章:

machine-learning - Mahout中基于用户喜好的推荐系统

python-3.x - ONNX 图 Python

opencv - 打开 CV - SfM 的几种方法

python - 全卷积网络——训练数据中不同大小的图像

python - 如何使 UUID PK 更易于索引

python - 组合非唯一外键来创建主键?

python - Healpy python-3..4 在 ubuntu-14.04 上的安装问题

python - 如何计算 50x20 矩阵的类内散布

api - 如何判断图片是否露骨

python - Xpath - 即使我只得到 1 个元素 - 检查器工具显示 7