You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch自定义Dataset正常但DataLoader无响应问题求助

问题:PyTorch DataLoader遍历内核无响应

我是PyTorch新手,正在开发基于自编码器的异常检测项目。训练集包含40万+张尺寸为(256,256,4)的图像,数据集存储在DATASET文件夹中:

  • 训练集:train/clean子文件夹下的所有图像
  • 测试集:test文件夹下的子文件夹对应不同标签的图像

我通过继承PyTorch对应类实现了自定义Dataset类:

class ImageDataset(Dataset):
    def __init__(self, directory, transform=None):
        self.paths = list(paths.list_images(directory))
        self.transform = transform
        self.classes, self.class_to_idx = torchvision.datasets.folder.find_classes(directory)  
    
    def __len__(self):
        return len(self.paths)
    
    def __getitem__(self, index):
        img = Image.open(self.paths[index])
        if self.transform:
            img = self.transform(img)
            
        label = os.path.basename(os.path.dirname(self.paths[index]))    
        class_idx = self.class_to_idx[label]
        return img, class_idx
    
    def get_classes(self):
        return self.classes
        
    def get_name(self, index):
        return self.paths[index]

训练目录的获取代码:

train_dir = Path('DATASET').joinpath('train')

创建训练和测试Dataset的代码:

dataset_to_split = ImageDataset(train_dir, transform=ToTensor())
test_dataset = ImageDataset(test_dir, transform=ToTensor())

print("Number of images in the whole train dataset: ", len(dataset_to_split))
print("Classes of the train dataset: ", dataset_to_split.classes, "\n")
print("Number of images in the test dataset: ", len(test_dataset))
print("Classes of the test dataset: ", test_dataset.classes)

执行后输出正常:

Number of images in the whole train dataset: 435404
Classes of the train dataset: ['clean']

Number of images in the test dataset: 15055
Classes of the test dataset: ['clean', 'dos11', 'dos53', 'scan11', 'scan44']

单独获取Dataset元素也能得到正确结果:

print(dataset_to_split[0])
print("\n\n", test_dataset[15000])

输出包含正确的图像张量和标签(训练集第一个元素标签为0,测试集第15000个元素标签为4)。

但创建DataLoader后遍历加载时内核陷入无响应,无任何输出:

batch_size = 10
test_dataloader = DataLoader(test_dataset, batch_size, shuffle=False, num_workers=os.cpu_count())

for batch, label in test_dataloader:
    print(label)

求帮忙排查问题!


内容的提问来源于stack exchange,提问作者Conca Giulio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:43:16