Tensorflow常见的抑制过拟合方法:数据增强、Dropout、BatchNormalization、正则化
目录
1.数据增强
数据增强采用的方法是从现有的示例中生成额外的训练数据,方法是使用生成可信图像的随机转换来增强这些数据。这有助于将模型暴露到数据的更多方面,并能更好地泛化。
Tensorflow中的用于数据增强的预处理层:
在训练过程中随机调整亮度的预处理层tf.keras.layers.RandomBrightness(
factor, #亮度范围单个值或者表示上下限的元组(-1,1),单个值时factor=0.2表示(-0.2,0.2)value_range=(0, 255), #输入像素值范围(0,1)或(0,255)
seed=None, #随机数种子
**kwargs
)
在训练过程中随机调整对比度的预处理层
tf.keras.layers.RandomContrast(
factor, #对比度范围单个数或者表示上下限的元组,单个数时其范围为[1-值,1+值]seed=None,
**kwargs
)
在训练过程中随机裁剪图像的预处理层
tf.keras.layers.RandomCrop(
height, #输出高
width, #输出宽
seed=None,
**kwargs
)
在训练过程中随机翻转图像的预处理层
tf.keras.layers.RandomFlip(
mode=HORIZONTAL_AND_VERTICAL, #翻转模式:horizontal”水平、“vertical”垂直或“horizontal_and_vertical”水平且垂直。默认为“horizontal_and_vertical”(水平左右,垂直上下)seed=None, **kwargs
)
在训练过程中随机改变图像高度的预处理层
tf.keras.layers.RandomHeight(
factor, #高度调整范围:一个正浮点数,或一个大小为2的元组interpolation='bilinear', #插值方式
seed=None, **kwargs
)
在训练过程中随机旋转图像的预处理层
tf.keras.layers.RandomRotation(
factor,#一个表示为2的小数的浮点数,或一个大小为2的元组,表示顺时针和逆时针旋转的上下界。正值表示逆时针旋转,负值表示顺时针旋转。
fill_mode='reflect',#输入边界以外的点的填充模式{"constant", "reflect", "wrap", "nearest"}
interpolation='bilinear',#插值模式。支持值:“nearest”,“bilinear”。
seed=None,
fill_value=0.0,
**kwargs
)
在训练过程中随机平移图像的预处理层
tf.keras.layers.RandomTranslation(
height_factor,#表示为值的一部分的浮点数,或大小为2的元组,表示垂直移动的下限和上限
width_factor,# 水平移动上下限
fill_mode='reflect',#输入边界以外的点的填充模式{"constant", "reflect", "wrap", "nearest"}
interpolation='bilinear',#插值模式。支持值:“nearest”,“bilinear”。
seed=None,
fill_value=0.0,
**kwargs
)
在训练过程中随机改变图像宽度的预处理层
tf.keras.layers.RandomWidth(
factor, interpolation='bilinear', seed=None, **kwargs
)
在训练过程中随机缩放图像的预处理层
tf.keras.layers.RandomZoom(
height_factor,
width_factor=None,
fill_mode='reflect',
interpolation='bilinear',
seed=None,
fill_value=0.0,
**kwargs
)
2.Dropout
学习的过程中随机删除神经元的方法;训练时,随机选出隐藏层的神经元,然后将其删除,被删除的神经元不再进行信号的传递。
tf.keras.layers.Dropout(
rate, #随机失活比例noise_shape=None, #
seed=None, #随机数种子
**kwargs
)
3.BatchNormalization
调整激活值(激活函数输出值)的分布使其具有适当的广度,具体为向神经网络中插入数据正规化的层。
(1)可以加快学习速度
(2)不那么依赖初始值
(3)抑制过拟合
以mnin batch(批量数据)为单位进行均值为0,方差为1的正规化
vb=1/m*np.sum(xi);方差a^2=1/m*np.sum(xi-vb)^2
xi=(xi-vb)/np.sqrt(a^2+10e-7)
正规化后进行缩放和平移变换:yi=γ*xi+B;初始γ=1,b=0
tf.keras.layers.BatchNormalization(
axis=-1, #批处理时归一化的轴
momentum=0.99,
epsilon=0.001,
center=True,#是否向归一化张量中添加偏置
scale=True, #是否使用gamma
beta_initializer='zeros',
gamma_initializer='ones',
moving_mean_initializer='zeros',
moving_variance_initializer='ones',
beta_regularizer=None, #beta权值的正则化器。
gamma_regularizer=None, #gamma的正则化器
beta_constraint=None, #beta的约束
gamma_constraint=None, #gamma的约束
**kwargs
)
4.正则化(权值衰减 )
给损失函数加上某种限制,抑制过拟合。
#L1正则化:
tf.keras.regularizers.L1(
l1=0.01, #惩罚因子**kwargs
)
#L1 L2正则化
tf.keras.regularizers.L1L2(
l1=0.0, l2=0.0
)
#L2正则化
tf.keras.regularizers.L2(
l2=0.01, **kwargs
)
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)