神经网络训练常见防止过拟合方法以及Tensorflow中的具体实现

目录

1 过拟合:

2 欠拟合:

3 常见防止过拟合的方法

(1)添加权重正则化

(2)添加Dropout层(随机失活)

(3)数据增强

(4)Batch Normallization


1 过拟合:

       简单来说就是模型在训练数据上的拟合能力高,但是在训练集之外的数据上拟合能力差(泛化能力差)。

2 欠拟合:

    过拟合的反面,模型在训练集上的拟合能力不足 ,可能是由训练不足,模型不够强大,正则化强度过高造成的。

3 常见防止过拟合的方法

(1)添加权重正则化

 由奥卡姆剃刀法则得出:最简单的往往是正确的,因此网络强制权重取小值;通过L1或L2范数实现,可以使得权重的分布更规则,因此成为正则化

L1正则化:添加的成本与权重系数的绝对值(即权重的“L1 范数”)成正比

L2正则化:添加的成本与权重系数值的平方(即权重的“L2 范数”)成正比。L2 正则化在神经网络中也被称为权重衰减。

Tensorflow中的具体应用:可添加在卷积层或者全连接层 

tf.keras.regularizers.L2(l2=)  L1正则化
tf.keras.regularizers.L1(l1=) L2正则化
tf.keras.regularizers.L1L2(l1=,l2=)  L1和L2正则化
model=tf.keras.Sequential([
    tf.keras.layers.Rescaling(1/255),
    tf.keras.layers.Conv2D(64,(3,3),padding='same',activation='relu',kernel_regularizer=tf.keras.regularizers.L2(l2=0.01),input_shape=(150,150,3)),
    tf.keras.layers.MaxPooling2D(2,2),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(5,activation='softmax')
    ])

(2)添加Dropout层(随机失活)

 在网络传递过程中对某一层随机选择一定比例的特征失活(不使用这些特征作为下一层的输入,设为0)

Tensorflow中的具体应用:可添加在卷积层或者全连接层 之后

 tf.keras.layers.Dropout(
    rate, #失活比例0-1一般设0.5

    noise_shape=None, ✡︎dropout中的noise_shape参数的作用 - 知乎

    seed=None, #随机数种子

     **kwargs
)

model=tf.keras.Sequential([
    tf.keras.layers.Rescaling(1/255),
    tf.keras.layers.Conv2D(64,(3,3),padding='same',activation='relu',kernel_regularizer=tf.keras.regularizers.L2(l2=0.01),input_shape=(150,150,3)),
    tf.keras.layers.MaxPooling2D(2,2),
    tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64,kernel_regularizer=tf.keras.regularizers.L2(l2=0.01),activation='relu'),
    tf.keras.layers.Dropout(rate=0.5),
    tf.keras.layers.Dense(5,activation='softmax')
    ])

(3)数据增强

           数据增强是在数据有限的情况下,利用有限的数据产生等价于更多数据的价值。常见方法有几何变换(翻转,旋转,移位,裁剪,变形,缩放)和颜色变换,还有其他的如SMOTE、GAN等(可参考:http://t.csdn.cn/StQky

(4)Batch Normallization

      Batch Norm 调整激活值(激活函数输出值)的分布使其具有适当的广度,具体为向神经网络中插入数据正规化的层
    ①可以加快学习速度
    ②不那么依赖初始值
    ③抑制过拟合
     以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,
    beta_initializer='zeros',
    gamma_initializer='ones',
    moving_mean_initializer='zeros',
    moving_variance_initializer='ones',
    beta_regularizer=None,
    gamma_regularizer=None,
    beta_constraint=None,
    gamma_constraint=None,
    **kwargs
)

model=tf.keras.Sequential([
    tf.keras.layers.Rescaling(1/255),
    tf.keras.layers.Conv2D(64,(3,3),padding='same',activation='relu',kernel_regularizer=tf.keras.regularizers.L2(l2=0.01),input_shape=(150,150,3)),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.MaxPooling2D(2,2),
    tf.keras.layers.Flatten(),
    tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dense(64,kernel_regularizer=tf.keras.regularizers.L2(l2=0.01),activation='relu'),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Dense(5,activation='softmax')
    ])

 除了上述四种方法外就还可以增加训练数据,降低网络容量,但是一般那以实现。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冲冲冲@chong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值