pytorch的數據增強

在利用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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章