PyTorch入门实战教程笔记,二十二:卷积神经网络CNN 4

PyTorch入门实战教程笔记(二十二):卷积神经网络CNN 4

数据增强

Data argumentation,Big Data 能够使网strain的很好,并且可以有效地防止过拟合。但是现实生活中对于照片的获得不太容易,并且还要对照片进行标注(打label)。如何解决神经网络对数据的需求,是一种挑战,使用数据增强能够解决这个挑战。如果现在对于有限的数据,可以进行Small network capacity,Regularzation,Data argumentation(旋转、裁剪、调色、加噪声等等)等来优化网络。

常用的数据增强的方法:Flip(翻转),Rotate(旋转),Random Move && Crop(随机平移/裁剪)、GAN(生成对抗网络)。

PyTorch入门实战教程笔记,二十二:卷积神经网络CNN 4

  1. Flip(翻转)

    翻转操作的pytorch实现,.RandomHorizontalFlip()水平角度的翻转,.RandomVerticalFlip()竖直方向的翻转,因为它是random,意味着把这个操作写到transform以后,然后会对图片的每一个图片做一个transform,如果没有Random,那就会先水平翻转,再竖直翻转,在转换成tensor数据(如果有Normalize的话,就做一次标准化)。这样的话,其实图片还是没变化的,所以有Random,也就是水平翻转或者竖直翻转,可能做, 也可能不做,这样能够使数据多样化,达到数据增强的效果。

    PyTorch入门实战教程笔记,二十二:卷积神经网络CNN 4

  2. Rotate(旋转)

    旋转操作的pytorch实现,.RandomRotation(),参数为旋转角度,比如15,那就是随机从(-15°,15°)范围内旋转,如果要固定这个角度,就传入list数据,如[0, 90, 180, 270],它会随机的在这三个角度中挑一个,随机旋转。

    PyTorch入门实战教程笔记,二十二:卷积神经网络CNN 4

  3. Scale(缩放)

    缩放操作的pytorch实现,我们调用 .Resize( [32, 32] ),就可以把原来的[28, 28]放大到 [32, 32]. 需要注意传入参数为list。

    PyTorch入门实战教程笔记,二十二:卷积神经网络CNN 4

  4. Crop Part (裁剪部分)

    随机裁剪在实践中用的更多一点,具体的实现: 调用 .RandomCrop( [28,28] )即可随机裁剪所需要的照片的大小。我们将随机旋转和随机裁剪结合起来,能够进一步达到数据增强的目的。

    PyTorch入门实战教程笔记,二十二:卷积神经网络CNN 4

    这些操作都是在transforms里面实现的,transforms是torchvision这个包提供的,并且还有一个transforms.Compose(),与nn.Module里面的nn.Sequential()操作类似,将一系列的transforms打包到一块,然后传进去一个list,一次过完就可以啦。直接调用transforms(x),就可以将x传进去,直接实现里面的一些列操作。

    此外,需要强调的是,虽然数据增强理论上可以变化无数多的照片,但是变换幅度(variance)还是很小的,也不会接近于无数的真实的照片。也就是说,Data argumentation虽然有帮助,但是不会帮助太多。