大概就是DataLoader的基本语法操作吧...毕竟博主也是刚开始学习
python
import torchvision
from torchvision import transforms, datasets
from torch.utils.tensorboard import SummaryWriter
from torch.utils.data import DataLoader
说明一下下面的transforms虽然只用了一个可以直接写到datasets.CIFAR10里面完全没问题,但是我还是更加建议下面的这样写,感觉是一个更好的习惯,对于以后使用多个transform的组合时很有利~
transfrom的使用具体可以参考上一篇blog
python
#设置通用transforms
dataset_transfroms = transforms.Compose([
transforms.ToTensor()
])
test_data = datasets.CIFAR10(root="./dataset",
train=False,
transform=dataset_transfroms)
num_workers:采用设置的子进程加载数据到内存
drop_last:数据总量对batch_size取余,余数部分是否drop
呃这里为什么要单独列出来一下呢是因为想提醒一下最好drop,因为博主隐约记得自己好像踩过batch_size大小不一样的报错坑(
python
# num_workers:采用设置的子进程加载数据到内存
# drop_last:数据总量对batch_size取余,余数部分是否drop
test_loader = DataLoader(dataset=test_data,
batch_size=64,
shuffle=True,
num_workers=0,
drop_last=True)
# img, target = test_data[0]
writer = SummaryWriter("dataloader_logs")
注(以下为个人理解,有错欢迎指正):
- test_loader是按批次读取的,一次读出的(也就是data)是含有batch_size个图片的
- 单次epoch 中需要学到所有数据
- 内循环中,会将所有数据都遍历到,外层循环中,决定epoch次学习所有数据
- 在深度学习训练中,对数据进行打乱 ,然后多次epoch读取到不同内容组合的batch数据进行学习
python
# test_loader是按批次读取的,一次读出的(也就是data)是含有batch_size个图片的
# 单次epoch中需要学到所有数据
# 内循环中,会将所有数据都遍历到,外层循环中,决定epoch次学习所有数据
# 在深度学习训练中,对数据进行打乱,然后多次epoch读取到不同内容的batch的数据进行学习
# 添加多张图是add_images
for epoch in range(5):
step=0
for data in test_loader:
imgs, target = data
writer.add_images("epoch_{}".format(epoch),imgs,step)
step +=1
writer.close()
# tensorboard --logdir=dataloader_logs
随便截了不同epoch的最后一个batch构成情况,可以看到内容组合不一样,这是因为我们进行了打乱操作,这样可以保证不同的epoch学习到的batch组合情况不一样