使用 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"))
欢迎大家指正错误答案。
我需要实现一个基于 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"))
欢迎大家指正错误答案。