使用 ResNet 进行多标签分类 - 使用数据加载器加载样本需要很长时间

Multilabel classification using ResNet - loading sample using the dataloader takes a long time

我需要实现一个基于 ResNet 的多类分类器,我使用 this notebook 作为起点。目前,我只是浏览笔记本,检查所有步骤是否正常。当我尝试使用数据加载器(命令:sample = next(iter(train_loader)))加载样本时,即使等待了一个多小时,我也没有得到任何结果。这是为什么?

数据加载器在此单元格中定义:

#Pre-processing transformations
data_transforms = transforms.Compose([
        transforms.Resize((224,224)),
        transforms.ToTensor(),
        transforms.Normalize((0.5,0.5,0.5), (0.5,0.5,0.5))
    ])

#Getting the data
cardata = CarDataset("./content/content/carimages/car_ims", transform=data_transforms,translation_dict=translation_dict)

#Split the data in training and testing
train_len = int(cardata.__len__()*0.8)
test_len = int(cardata.__len__()*0.2)
train_set, val_set = torch.utils.data.random_split(cardata, [train_len, test_len])

#Create the dataloader for each dataset
train_loader = DataLoader(train_set, batch_size=16, shuffle=True, 
                                num_workers=4, drop_last=True)
test_loader = DataLoader(val_set, batch_size=16, shuffle=False, 
                               num_workers=4, drop_last=True)

如果我尝试使用

在 GPU 上加载数据
train_set.cardata.to(torch.device("cuda:0"))  # put data into GPU entirely
train_set.to(torch.device("cuda:0"))

我收到错误 'Subset' object has no attribute 'cardata'。难道我做错了什么?数据加载器加载数据集图像需要这么长时间是正常的吗?谢谢!

调用train/val 设置和提供代码的加载器似乎没有错误。 CarDataset() class 中可能存在错误,或者设置 num_workers=0 可能会有所帮助。

此外,请避免通过next(iter(train_loader))获取样本。每次调用时都会创建一个新的加载程序。请改用 train_iter = iter(train_loader)inputs, labels = train_iter.next()

另外,据我所知,不支持将整个数据集放到一个或多个GPU上。您可以向其加载 mini-batch 数据(pytorch 张量):inputs = inputs.to(torch.device("cuda"))

欢迎大家指正错误答案。