在利用Pytorch进行深度学习的时候,经常是在固定的数据集上进行epoch次训练,常用代码如下所示:
import torch
import torch.nn as nn
from torchvision import datasets, transforms
transform_list = [
transforms.Resize((256,128), interpolation=3),
transforms.RandomHorizontalFlip(p=0.5),
transforms.Pad(10),
transforms.RandomCrop((256,128)),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406],[0.229, 0.224, 0.225])
]
transform_compose = transforms.Compose(transform_list)
try_dataset1 = datasets.ImageFolder('./try_data2',transform_compose)
try_dataloader1 = torch.utils.data.DataLoader( try_dataset1, batch_size=4,shuffle=True )
epoch = 10
for i in range(epoch):
for data in try_dataloader1:
inputs,labels = data
print(inputs.sum())
但是我们的try_dataloader1在进入epoch循环之前就已经定义了,那么对于数据的增强处理,比如裁剪、翻转等,难道说只进行了一次吗?答案是否定的,在每次获取data的时候,都会进行这种数据增强操作,实验如下:
transform_compose = transforms.Compose(transform_list)
try_dataset1 = datasets.ImageFolder('./try_data2',transform_compose)
try_dataloader1 = torch.utils.data.DataLoader( try_dataset1, batch_size=4 )
epoch = 10
for i in range(epoch):
print("epoch {}" .format(i))
for data in try_dataloader1:
inputs,labels = data
print(inputs.sum())
如果只对数据增强操作进行了一次的话,那么每次的.sum值应该是相同的 ,但是结果却是不同的,这说明每当获得一次data,都相当于是在获取的操作中进行了数据增强的操作。
结果如下:
epoch 0
tensor(-197226.9688)
tensor(-162211.0781)
tensor(-102560.9062)
epoch 1
tensor(-196300.1250)
tensor(-164609.2188)
tensor(-82898.9531)
epoch 2
tensor(-194079.5156)
tensor(-175566.)
tensor(-94034.0469)
epoch 3
tensor(-204648.8438)
tensor(-163293.3281)
tensor(-93733.1641)
epoch 4
tensor(-194449.8750)
tensor(-145408.9688)
tensor(-107744.4062)
epoch 5
tensor(-220769.4219)
tensor(-163949.2188)
tensor(-88742.4688)
epoch 6
tensor(-204906.4375)
tensor(-155830.3438)
tensor(-87216.5469)
epoch 7