目前深度学习神经网络对数据的要求很高,不进数据要相关,且更要有尽可能大的数据集。
那么在现实生活中,想要得到大量的数据,不仅要收集各种情景下、各种角度、各个位置的照片,还有确保数据的多样性。
只有这样才能确保神经网络学到更加全面的特征。
但在现实中若想达到以上目的往往要付出巨大的代价,并且还有对照片上出现的东西进行准确标注,另外对于一些稀有的物种的信息收集更是十分困难。
因此本节介绍一些为神经网络提供更多数据的方法-数据增强。
数据增强有多种手段,包括对原照片进行旋转、拉伸、加噪声等处理。
其实在之前所讲课程中就已经讲了数据增强的方法,
如在数据中加入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)
本文分享自 python pytorch AI机器学习实践 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!