Pytorch小技巧-數據增強(下)
- 2019 年 12 月 9 日
- 筆記
Scale(縮放操作)

上圖可見,圖片由左至右分別增大了20%、40%。
利用之前知識可以採用Resize操作,如將28*28轉化成32*32。
train_loader = torch.utils.data.DataLoader( datasets.MNIST('data', train=True, download=True, transform=transforms.Compose([ transforms.RandomHorizontalFlip(), # transforms.RandomHorizontalFlip()為水平翻轉 transforms.RandomVerticalFlip(), # transforms.RandomHorizontalFlip()為上下翻轉 transforms.RandomRotation(15), # 隨機旋轉了-15°至15° transforms.ToTensor(), transforms.RandomRotation([90, 180, 270]), # 或者自定義旋轉了90°, 180°, 270° transforms.Resize([32, 32]), # 轉化到32*32 ])), batch_size=batch_size, shuffle=True)
還有Crop Part(裁剪)部分

局部增強,一般裁剪操作是配合圖片旋轉操作共同進行,先裁減掉一部分,再進行旋轉即可。
程式碼如下
train_loader = torch.utils.data.DataLoader( datasets.MNIST('data', train=True, download=True, transform=transforms.Compose([ transforms.RandomHorizontalFlip(), # transforms.RandomHorizontalFlip()為水平翻轉 transforms.RandomVerticalFlip(), # transforms.RandomHorizontalFlip()為上下翻轉 transforms.RandomRotation(15), # 隨機旋轉了-15°至15° transforms.ToTensor(), transforms.RandomRotation([90, 180, 270]), # 或者自定義旋轉了90°, 180°, 270° transforms.Resize([32, 32]), # 轉化到32*32 transforms.RandomCrop([28, 28]) # 先旋轉了15°,轉換成32*32,再取28*28部分 ])), batch_size=batch_size, shuffle=True)
還有一個不是很常見的操作Noise(雜訊處理)

pytorch中暫時還沒有相關介面,這裡不再贅述
要注意的是,這種數據增強的操作是會對模型的訓練有所幫助,因為它或多或少的增加了一些可用於學習的數據。
即便理論上他可以將少數的照片擴展成無數張照片,但作用並不會有那麼大。因為他們間的差別很小,反而會導致訓練時間延長。