准备数据集
使用CIFAR10数据集,dataloader的batchsize为4
test_set = torchvision.datasets.CIFAR10("../dataset_transform",train=False,transform=torchvision.transforms.ToTensor(),download=True)
test_loader = DataLoader(dataset=test_set,batch_size=4,shuffle=True,num_workers=0,drop_last=False)
DataLoader 中,每次 iter 调用(例如 for data in dataloader)将返回一个批次数据(这里一个批次包含四个数据)。根据定义的数据集的样式,这些元组可能包含一个或多个数据集的输入和目标(这里是四个img、target),返回时是将imgs一起打包返回,不是一个img一个target打包返回。dataloder的数据排列结构如下(按顺序取数据)
返回dataloader结果
for data in test_loader:
imgs,targets = data
print(imgs.shape)
print(targets)
torch.Size([4,3,32,32]):4个数据,3通道,图片大小32*32
tensor([2,3,6,8])是4个target的打包(target是图片类别对应的序号)
字典格式存储的dataloader如何取结果
datasets.ImageFolder读取本地数据
root_dir = "E:\\todo\\dataset"
train_dir = root_dir+"/train"
valid_dir = root_dir+"/valid"
data_transforms = {"train":transforms.ToTensor(),"valid":transforms.ToTensor()}
img_datasets = {x:datasets.ImageFolder(os.path.join(root_dir,x),data_transforms[x]) for x in ['train','valid']}
装载数据,使用字典形式存储,key为train、valid
batch_size = 1
dataloaders = {x: torch.utils.data.DataLoader(img_datasets[x],batch_size=batch_size,shuffle=True) for x in['train','valid']}
第一层for循环先按key读取字典方式获取对应value(value为Dataloader类型),第二层for循环遍历value,读取方式和上文读取dataloader方式一样
# i=tain/valid
for i in dataloaders:
for data in dataloaders[i]:
img,target = data
print(img)
print(target)
print("-----------------------------------------------------------------------------------------------------------------")
batchsize为1,即返回一张图片的img和target,结果分隔线上面为train数据集的imgs、targets,下面为valid数据集图片信息