Scale(缩放操作)
上图可见,图片由左至右分别增大了20%、40%。
利用之前知识可以采用Resize操作,如将28*28转化成32*32。
代码语言:javascript复制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°
transforms.Resize([32, 32]),
# 转化到32*32
])),
batch_size=batch_size, shuffle=True)
还有Crop Part(裁剪)部分
局部增强,一般裁剪操作是配合图片旋转操作共同进行,先裁减掉一部分,再进行旋转即可。
代码如下
代码语言:javascript复制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°
transforms.Resize([32, 32]),
# 转化到32*32
transforms.RandomCrop([28, 28])
# 先旋转了15°,转换成32*32,再取28*28部分
])),
batch_size=batch_size, shuffle=True)
还有一个不是很常见的操作Noise(噪声处理)
pytorch中暂时还没有相关接口,这里不再赘述
要注意的是,这种数据增强的操作是会对模型的训练有所帮助,因为它或多或少的增加了一些可用于学习的数据。
即便理论上他可以将少数的照片扩展成无数张照片,但作用并不会有那么大。因为他们间的差别很小,反而会导致训练时间延长。