Pytorch小技巧-數據增強(上)
- 2019 年 12 月 5 日
- 筆記
目前深度學習神經網路對數據的要求很高,不進數據要相關,且更要有儘可能大的數據集。
那麼在現實生活中,想要得到大量的數據,不僅要收集各種情景下、各種角度、各個位置的照片,還有確保數據的多樣性。
只有這樣才能確保神經網路學到更加全面的特徵。
但在現實中若想達到以上目的往往要付出巨大的代價,並且還有對照片上出現的東西進行準確標註,另外對於一些稀有的物種的資訊收集更是十分困難。
因此本節介紹一些為神經網路提供更多數據的方法-數據增強。
數據增強有多種手段,包括對原照片進行旋轉、拉伸、加雜訊等處理。
其實在之前所講課程中就已經講了數據增強的方法,
如在數據中加入shuffle=True,將原數據隨機打亂,並沒有增加照片的數量。但本文所講的是在原照片數據量較少的情況下進行數據增強,以加入一些經過旋轉、拉伸等處理後的圖片。
要注意的是採用這種方法加入的數據肯定沒有新圖片效果好,因為其本質上仍是原圖片。
如下圖所示

數據增強手段包括有:(1)Flip(圖片翻轉)、(2)Rotate(旋轉)、(3)Random Move & Crop(隨機移動、裁剪)、(4)GAN(GAN神經網路)。
首先看數據翻轉

如上圖所示原圖片黃人在右邊,經過翻轉後黃人在左面,再經過上下翻轉後,整個圖片倒立。
程式碼實現方式如下
import torch import torch.nn import torch.nn.functional as F 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.ToTensor(), ])), batch_size=batch_size, shuffle=True)
旋轉操作也十分常見

上面分別經過了90°、180°、270°的旋轉。
它的程式碼實現方 式也十分簡單
import torch import torch.nn import torch.nn.functional as F 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° ])), batch_size=batch_size, shuffle=True)