5、数据增强
5.1、简介
问题:深度学习中通常会要求数量很大的训练样本,一般来说,样本数量越多,训练效果越好,但是这么庞大的样本的收集整理是很大的工程。
依据:如果对一张图像进行简单的平移、翻转、缩放、颜色变换等操作,并不会改变图像的类别。
结论:数据增强是指对训练的图像数据,利用平移、翻转、缩放、颜色变换等操作,增大训练样本个数,从而得到充足的数据,使模型训练得更好。
常用的数据增强方法如下:
平移:将图像在一定尺寸范围内平移
翻转:水平或上下翻转图像
旋转:将图像在一定角度内旋转
裁剪:在原图像中裁剪一块图像
缩放:将图像按一定比例方法或者缩小
颜色变换:对图像的RGB进行变换
噪声扰动:给图像加入一些人工噪声
注:使用数据增强的前提是不能改变图像原有标签属性,比如,数字6不能旋转180度等等
5.2、tensorflow数据增强实现
首先将原始图片使用matplotlib.pyplot工具显示出来
#encoding:utf-8
import tensorflow as tf
import matplotlib.pyplot as plt
#读取原始图像数据
image_data = tf.gfile.FastGFile('la.jpg', 'r').read()
with tf.Session() as sess:
#对图像使用jpg格式解码,得到三维数据
pltdata = tf.image.decode_jpeg(image_data)
#显示图像
plt.imshow(pltdata.eval())
plt.show()
效果如下:
对图像上下翻转:
#encoding:utf-8
import tensorflow as tf
import matplotlib.pyplot as plt
#读取原始图像数据
image_data = tf.gfile.FastGFile('la.jpg', 'r').read()
with tf.Session() as sess:
#对图像使用jpg格式解码,得到三维数据
pltdata = tf.image.decode_jpeg(image_data)
#对图像上下翻转
pltdata = tf.image.flip_up_down(pltdata)
#显示图像
plt.imshow(pltdata.eval())
plt.show()
效果如下(这图看着有点头晕啊~~):
6、学习率设置
学习率决定了每次更新的速度,如果幅度过大,可以导致参数在极忧值两侧来回移动,如果幅度过小,就会大大降低优化速度。为了解决这个问题,tensorflow提供了一种更加灵活的学习率设置方法----指数衰减法(tf.train.exponential_decay函数)。
通过这个函数可以先使用较大的学习率快速得到一个比较优的解,然后逐步减小学习率,使得模型在训练后期更加稳定。如下图所示:
7、滑动平均模型
滑动平均模型可以使模型在测试数据上更加健壮。在采用随即梯度下降法训练神经网络时,使用滑动平均模型在很多应用中可以在一定程度上提高最终模型在测试数据上的表现。
tansorflow提供了tf.train.ExponentialMovingAverage来实现滑动平均模型。在初始化该函数时需要提供一个衰减率(decay),这个衰减率将用于控制模型更新的速度。decay决定了模型更新速度,decay越大,模型越趋于稳定,一般设置成非常接近1的数,比如0.999或0.9999。