Pytorch小技巧-数据增强(下)

2019-12-09 18:49:39 浏览数 (1)

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中暂时还没有相关接口,这里不再赘述

要注意的是,这种数据增强的操作是会对模型的训练有所帮助,因为它或多或少的增加了一些可用于学习的数据。

即便理论上他可以将少数的照片扩展成无数张照片,但作用并不会有那么大。因为他们间的差别很小,反而会导致训练时间延长。

0 人点赞