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)