TypeError:“非类型”对象不能解释为整数

2024-09-24 22:19:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Pytork对猫和狗进行分类。所以我从Kaggle下载了数据集,并将训练/验证集分开。我将文件名从00001.jpg更改为cat.00001.jpg。。 但是当我尝试使用enumerate(dataset)时,会出现以下错误:

我的数据集代码是:

class TrainImageFolder(Dataset):
    def __init__(self, path, transform=None):
        self.transform = transform
        self.path = path
        self.image = []
        self.label = []
        for i in os.listdir(self.path):
            self.image.append(i)
            if i.startswith("cat"):
                self.label.append(0)
            elif i.startswith("dog"):
                self.label.append(1)
        assert len(self.label) == len(self.image)

    def __len__(self):
        len(self.image)

    def __getitem__(self, index):
        label = self.label[index]
        img = Image.open(self.image[index]).convert("RGB")
        if self.transform:
            img = self.transform(img)
        return img, label

train_transform = transforms.Compose([transforms.Resize((224, 224)),
                                transforms.RandomHorizontalFlip(),
                                transforms.ToTensor(),
                                transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])

train_dataset = TrainImageFolder('train', transform=train_transform)
train_dataloader = torch.utils.data.DataLoader(train_dataset, batch_size=32, shuffle=False)

for i, (imgs, labels) in tqdm(enumerate(train_dataloader)):
    print(labels)
    

错误是:

Traceback (most recent call last):
  File "C:/Users/ge971/PycharmProjects/myVGG16/dataset.py", line 148, in <module>
    for i, (imgs, labels) in tqdm(enumerate(train_dataloader)):
  File "C:\Users\ge971\miniconda3\envs\torch17\lib\site-packages\tqdm\std.py", line 1166, in __iter__
    for obj in iterable:
  File "C:\Users\ge971\miniconda3\envs\torch17\lib\site-packages\torch\utils\data\dataloader.py", line 435, in __next__
    data = self._next_data()
  File "C:\Users\ge971\miniconda3\envs\torch17\lib\site-packages\torch\utils\data\dataloader.py", line 474, in _next_data
    index = self._next_index()  # may raise StopIteration
  File "C:\Users\ge971\miniconda3\envs\torch17\lib\site-packages\torch\utils\data\dataloader.py", line 427, in _next_index
    return next(self._sampler_iter)  # may raise StopIteration
  File "C:\Users\ge971\miniconda3\envs\torch17\lib\site-packages\torch\utils\data\sampler.py", line 227, in __iter__
    for idx in self.sampler:
  File "C:\Users\ge971\miniconda3\envs\torch17\lib\site-packages\torch\utils\data\sampler.py", line 67, in __iter__
    return iter(range(len(self.data_source)))
TypeError: 'NoneType' object cannot be interpreted as an integer

Process finished with exit code 1

你能告诉我如何修正这个错误吗?请帮帮我


Tags: inpyselfdataindexlinetransformtrain