防止过拟合(三):数据增强(增加训练样本)

深度学习笔记:欠拟合、过拟合
防止过拟合(一):正则化
防止过拟合(二):Dropout

数据增强(Date Augmentation)

增加数据集大小是解决过拟合最重要的途径。但是收集样本数据和标注往往是代价昂贵的,在有限的数据集上,通过数据增强技术可以增加训练的样本数量,获得一定程度上的性能提升。
**数据增强(Data Augmentation)**是指在维持样本标签不变的条件下,根据先验知识改变样本的特征,使得新产生的样本也符合或者近似符合数据的真实分布。
常见的数据增强方式:旋转、缩放、平移、裁剪、改变视角、遮挡某局部区域,这样都不会改变图片的类别标签。

基本数据增强方式实现

TensorFlow 中提供了常用图片的处理函数,位于 tf.image 子模块中。
1.缩放
通过tf.image.resize 函数可以实现图片的缩放功能。

# 将输入图片x缩放到224*224
x = tf.image.resize(x, [224, 224])

2.旋转
通过 tf.image.rot90(x, k=1)可以实现图片按逆时针方式旋转 k 个 90 度。

# 图片逆时针旋转180度
x = tf.image.rot90(x, 2)

3.翻转
可以通过 tf.image.random_flip_left_right 和 tf.image.random_flip_up_down 实现图片在水平方向竖直方向的随机翻转操作

# 水平方向翻转(左右颠倒,镜像图片)
x = tf.image.random_flip_left_right(x)
# 竖直方向翻转(上下颠倒)
x = tf.image.random_flip_up_down(x)

4.裁剪
通过在原图的左右或者上下方向去掉部分边缘像素,可以保持图片主体不变,同时获得新的图片样本。
在实际裁剪时,一般先将图片缩放到略大于网络输入尺寸的大小,再进行裁剪到合适大小,例如网络的输入大小为 224x224,那么我们先通过 resize 函数将图片缩放到 244x244 大小,再随机裁剪到 224x224 大小。

# 图片先缩放到稍到尺寸
x = tf.image.resize(x, [224, 224])
# 再随机裁剪到合适尺寸
x = tf.image.random_crop(x, [224,224,3])

5.其他方法,比如:添加噪声,变换视角、随机遮挡等。
下图展示了上述不同数据增强方法后的效果:
防止过拟合(三):数据增强(增加训练样本)_第1张图片

生成数据

除此之外,还可以通过条件生成对抗网络(Conditional GAN, CGAN)可以生成带标签的样本数据。
通过生成模型在原有数据上学习到数据的分布,从而生成新的样本,这种方式也可以在一定程度上提升网络性能。

你可能感兴趣的:(深度学习理论)