1、数据增强
# 创建ImageDataGenerator实例
data_generate = ImageDataGenerator(featurewise_center=False, # 将输入数据的均值设置为0
samplewise_center=False, # 将每个样本的均值设置为0
featurewise_std_normalization=False, # 将输入除以数据标准差,逐特征进行
samplewise_std_normalization=False, # 将每个输出除以其标准差
zca_epsilon=1e-6, # ZCA白化的epsilon值,默认为1e-6
zca_whitening=False, # 是否应用ZCA白化
rotation_range=0, # 随机旋转的度数范围,输入为整数
width_shift_range=0.1, # 左右平移,输入为浮点数,大于1时输出为像素值
height_shift_range=0.1, # 上下平移,输入为浮点数,大于1时输出为像素值
shear_range=0., # 剪切强度,输入为浮点数
zoom_range=0.1, # 随机缩放,输入为浮点数
channel_shift_range=0., # 随机通道转换范围,输入为浮点数
fill_mode='nearest', # 输入边界以外点的填充方式,还有constant,reflect,wrap三种填充方式
cval=0., # 用于填充的值,当fill_mode='constant'时生效
horizontal_flip=True, # 随机水平翻转
vertical_flip=False, # 随机垂直翻转
rescale=None, # 重随放因子,为None或0时不进行缩放
preprocessing_function=None, # 应用于每个输入的函数
data_format=None, # 图像数据格式,默认为channels_last
validation_split=0)
2、批正则化(batch normalization):中文通常翻译为“批归一化”,是神经网络训练中的一种重要技术。它的主要目的是解决神经网络训练过程中的内部协变量偏移(Internal Covariate Shift)问题,通过对每一层神经网络的输入进行归一化处理,使得输入数据的分布更加稳定,从而提高模型的训练速度和精度。
x = keras.layers.BatchNormalization()(x) # 数据归一化
3、自定义学习率衰减
def scheduler(epoch):
if epoch < epochs * 0.4:
return learning_rate
if epoch < epochs * 0.8:
return learning_rate * 0.1
return learning_rate * 0.01
不进行数据增强
[0.7586379051208496, 0.7317000031471252]
进行数据增强
进行数据增强后,测试集准确率降低
二、ResNet18
使用最简单的ResNet18网络进行训练,训练集准确率如下:
测试集loss、acc: [0.7052783966064453, 0.7954000234603882]