背景介绍
大量的数据是防止过拟合的关键,但是我们如何去获取大量的数据,是自己去拍摄、录制吗?显然这种方式有极高的成本。我们可以对同一张图片进行变换得到多张图片,比如原来只有10张图片,通过变换变成了20张图片,但是并不能无限的增长,也是有限制的,这种方法就叫做数据增强。数据增强的成本基本为0,虽然最后得到的图片效果也没有原图片好,但是有总比没有强,会在一定程度上增强我们的模型。
翻转(Flip)
代码实现:
train_loader = torch.utils.data.DataLoader(
datasets.MNIST('../data', train=True, download=True,
transform=transforms.Compose([
transforms.RandomHorizontalFlip(), #水平翻转
transforms.RandomVerticalFlip(), #竖直翻转
transforms.ToTensor()
])),
batch_size=batch_size, shuffle=True)
旋转(Rotate)
代码实现:
train_loader = torch.utils.data.DataLoader(
datasets.MNIST('../data', train=True, download=True,
transform=transforms.Compose([
transforms.RandomRotation(15), #-15度-15度的角度随机旋转
transforms.RandomRotation([90, 180, 270]), #随机旋转90度,180度,270度
transforms.ToTensor()
])),
batch_size=batch_size, shuffle=True)
缩放(Scale)
代码实现:
train_loader = torch.utils.data.DataLoader(
datasets.MNIST('../data', train=True, download=True,
transform=transforms.Compose([
transforms.Resize([32, 32]), #scale 缩放
transforms.ToTensor()
])),
batch_size=batch_size, shuffle=True)
裁剪或部分式旋转(Crop Part)
代码实现:
train_loader = torch.utils.data.DataLoader(
datasets.MNIST('../data', train=True, download=True,
transform=transforms.Compose([
transforms.RandomRotation(15), #-15度-15度的角度随机旋转
transforms.RandomRotation([90, 180, 270]), #随机旋转90度,180度,270度
transforms.RandomCrop([28, 28]), #随机裁剪
transforms.ToTensor()
])),
batch_size=batch_size, shuffle=True)
加噪声(Noise)
参考:课时75 数据增强_哔哩哔哩_bilibili