Pytorch小技巧-数据增强(下)
- 2019 年 12 月 9 日
- 筆記
Scale(缩放操作)

上图可见,图片由左至右分别增大了20%、40%。
利用之前知识可以采用Resize操作,如将28*28转化成32*32。
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(裁剪)部分

局部增强,一般裁剪操作是配合图片旋转操作共同进行,先裁减掉一部分,再进行旋转即可。
代码如下
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中暂时还没有相关接口,这里不再赘述
要注意的是,这种数据增强的操作是会对模型的训练有所帮助,因为它或多或少的增加了一些可用于学习的数据。
即便理论上他可以将少数的照片扩展成无数张照片,但作用并不会有那么大。因为他们间的差别很小,反而会导致训练时间延长。