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)