1. 數據增強
-
比如,你遇到的一個任務,目前只有小幾百的數據,然而目前流行的最先進的神經網絡都是成千上萬的圖片數據,可以通過數據增強來實現。
-
卷積神經網絡非常容易出現過擬合的問題,而數據增強的方法是對抗過擬合問題的一個重要方法。
常用的數據增強手段:
-
Flip(翻轉)
-
Rotation(旋轉)
-
Scale(縮放)
-
Random Move&Crop(移位&裁剪)
-
Gaussian Noise(高斯噪聲)
前4個操作都是由torchvision
包中的transforms
完成的。
import torch
from torchvision import datasets, transforms
batch_size = 200
train_loader = torch.utils.data.DataLoader(
datasets.MNIST('../data', train=True, download=True,
transform=transforms.Compose([
transforms.RandomHorizontalFlip(), # 水平翻轉
transforms.RandomVerticalFlip(), # 豎直翻轉
transforms.RandomRotation(15), # 旋轉,范圍-15°~15°
transforms.RandomRotation([90, 180]), # 從二個角度中挑一個旋轉(序列len只能為2)
transforms.Resize([32, 32]), # 縮放
transforms.RandomCrop([28, 28]), # 隨機裁剪
transforms.ToTensor(),
# transforms.Normalize((0.1307,), (0.3081,))
])),
batch_size=batch_size, shuffle=True)
2. 數據增強演示
import sys
from PIL import Image
from torchvision import transforms as tfs
# 讀入一張圖片
im = Image.open('./1.png')
im
2.1 水平翻轉
new_im = transforms.RandomHorizontalFlip()(im) # 水平翻轉
new_im
2.2 隨機剪裁
new_im = transforms.RandomCrop([200, 200])(im)
new_im