在实际的深度学习当中,我们通常会遇到收集的数据过少,收集数据过于困难等,导致训练过程中很容易发生过拟合等现象.这时候我们就需要对数据进行扩充来避免这种现象.
下面就以图片来做例子,最简单的对图片进行扩充的方法是翻转,包括水平翻转和垂直翻转,但一般图像用到最多的是水平翻转,(正常物体不可能跑到天上去).还有对图像进行扭曲,变形,拉伸,填充,改变hsv或者rgb的值等等.
keras数据库提供了很好的解决途径.
#图片生成器ImageDataGenerator
keras.preprocessing.image.ImageDataGenerator(featurewise_center=False,
samplewise_center=False,
featurewise_std_normalization=False,
samplewise_std_normalization=False,
zca_whitening=False,
zca_epsilon=1e-6,
rotation_range=0.,
width_shift_range=0.,
height_shift_range=0.,
shear_range=0.,
zoom_range=0.,
channel_shift_range=0.,
fill_mode='nearest',
cval=0.,
horizontal_flip=False,
vertical_flip=False,
rescale=None,
preprocessing_function=None,
data_format=K.image_data_format())
#用以生成一个batch的图像数据,支持实时数据提升。训练时该函数会无限生成数据,直到达到规定的epoch次数为止。
'''参数
featurewise_center:布尔值,使输入数据集去中心化(均值为0), 按feature执行
samplewise_center:布尔值,使输入数据的每个样本均值为0
featurewise_std_normalization:布尔值,将输入除以数据集的标准差以完成标准化, 按feature执行
samplewise_std_normalization:布尔值,将输入的每个样本除以其自身的标准差
zca_whitening:布尔值,对输入数据施