1. transforms的使用
在pytorch官网下载数据集,并在transforms中显示
直接打印数据集是PIL格式的,需要通过ToTensor转换格式。
root自动下载的数据集的根目录
train是否为训练集
download是否自动下载训练集设置完,运行后就自动下载数据集
train_set = torchvision.datasets.CIFAR10(root="./dataset", train=True, transform=dataset_transforms,download=True)
import torchvision
from torch.utils.tensorboard import SummaryWriter
# 将数据集转换数据格式。
dataset_transforms = torchvision.transforms.Compose([
torchvision.transforms.ToTensor() # 转为tensor类型
])
# root自动下载的数据集的根目录 train是否为训练集 download是否自动下载训练集
# 设置完,运行后就自动下载数据集
train_set = torchvision.datasets.CIFAR10(root="./dataset", train=True, transform=dataset_transforms,download=True)
test_set = torchvision.datasets.CIFAR10(root="./dataset", train=False,transform=dataset_transforms, download=True)
# print(test_set[0])
# print(test_set[1])
# print(test_set.classes)
img, target = test_set[0]
# print(img) # (<PIL.Image.Image image mode=RGB size=32x32 at 0x24D66551C18>, 3)
# print(target) # 类别列表的索引
# print(test_set.classes[target]) #打印此类别
# img.show() # 图片展示
# print(test_set[0])
print(img.shape)
print(img)
# 在transforms中进行展示
writer = SummaryWriter("../logs")
for i in range(10):
img ,target = test_set[i]
writer.add_image("torchvision" ,img, i )
writer.close()
2. dataloader的使用
- batch_size=4 就是在dataset中取出四个数据进行组合,列如img0,img1,img2,img3组合在一起。这个过程是随机选择四张图片进行组合。
- num_workers=0单进程或多进程 加载数据 设置为0是利用主进程加载数据,
- drop_last=False将总数据分成batch_size,如果最后有剩余组不成一个batch那就,True表示舍去最后的,False表示不舍去。
- shuffle=True 的时候所选择的图片 被随机打乱,也就是重新洗牌 false就不会重新洗牌
test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=False, num_workers=0, drop_last=True)
- epoch作用就是为了测试shuffle的作用,进行两次迭代,是否图片的展示顺序一样,
- step作用是,通过step的递增,使图片在一个标签中展示。
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
# 准备测试集
test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor(), download=True)
# batch_size=4 就是在dataset中取出四个数据进行组合,列如img0,img1,img2,img3组合在一起。这个过程是随机选择四张图片进行组合。
# num_workers=0单进程或多进程 加载数据 设置为0是利用主进程加载数据,
# drop_last=False将总数据分成batch_size,如果最后有剩余组不成一个batch那就,True表示舍去最后的,False表示不舍去。
#
test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=False, num_workers=0, drop_last=True)
# 测试数据集中的第一张图片
img, target = test_data[0]
print(img.shape)
print(target)
# 将数据集中所有的batch在tensorboard中进行展示
writer = SummaryWriter("dataloader")
step = 0
for epoch in range(2):#shuffle=True 的时候所选择的图片 被随机打乱,也就是重新洗牌 false就不会重新洗牌
for data in test_loader:
imgs, targets = data
# print(img.shape) # torch.Size([4, 3, 32, 32]) 4表示每个batch有四个图片
# print(target) # tensor([3, 8, 8, 0]) 表示四个图片的target
writer.add_images("epoch:{}".format(epoch), imgs, step)
step = step + 1
writer.close()