七 torchvision中数据集的使用
7.1 下载数据集
- pytorch提供的目标识别数据集CIFAR10 pytorchvision
CLASStorchvision.datasets.CIFAR10(root: str, train: bool = True, transform: Optional[Callable] = None, target_transform: Optional[Callable] = None, download: bool = False)
参数
root (string) – 数据集的位置
train (bool, optional) – 是训练集还是测试集
transform (callable, optional) – 对图片使用什么样的transform
download (bool, optional) –自动下载数据集
- 下载并打开数据集的第一个数据,会发现最后一个数字是6,代表的是这张图片的target。这个数据定义train_set的classes里,在train_set的数据结构里可以看到,6对应的是frog。
import torchvision
train_set=torchvision.datasets.CIFAR10(root="./CIFAR10",train=True,download=True)
test_set=torchvision.datasets.CIFAR10(root="./CIFAR10",train=False,download=True)
print(train_set[0])
img,target=train_set[0]#第1个数据的图片和目标
print(img)
print(target)
print(train_set.classes[target])#目标是用数字表示的,对应的物体写在classes里
- 对其中的每一张图片都做一个transform
import torchvision
from torch.utils.tensorboard import SummaryWriter
trans_compose=torchvision.transforms.Compose([torchvision.transforms.ToTensor()])
train_set=torchvision.datasets.CIFAR10(root="./CIFAR10",train=True,transform=trans_compose,download=True)
test_set=torchvision.datasets.CIFAR10(root="./CIFAR10",train=False,transform=trans_compose,download=True)
writer=SummaryWriter('logs')
for i in range(10):
img,target=train_set[i]
writer.add_image("trainset",img,i)
7.2 用DataLoader加载数据集
- DataLoader
torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, batch_sampler=None, num_workers=0, collate_fn=None, pin_memory=False, drop_last=False, timeout=0, worker_init_fn=None, multiprocessing_context=None, generator=None, *, prefetch_factor=2, persistent_workers=False)
batch_size,每个batch里是多少张图片
shuffer,每个epoch里数据的顺序是否是一样的
num_workers,线程数
drop_last ,如果最后剩的图片不足一个batch,是否舍弃
- batch_size的设定
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
test_set=torchvision.datasets.CIFAR10(root="./CIFAR10",train=False,transform=torchvision.transforms