处理过拟合的一些方法

1.减小网络大小

防止过拟合的最简单的方法就是减小模型大小,即减少模型中可学习参数的个数,当学习参数过多时候,就相当于一个线性函数本来只需要两个参数(一个截距一个斜率)就可以表达出来(当然样本点是不会完全在直线上的,分布于直线两侧),但是这时候你给了5个参数,那么所表达出来的线就会穿过更多的点,这个时候曲线会变成四次曲线,模型的泛化力会显著下降。

2.添加权重正则化

一个问题的解释有两种样子,其中一个是简单的一种是复杂的,那么最可能的就是那种简单的解释。一种常见的降低过拟合的方法就是强制让模型权重只能取较小的值,从而限制模型的复杂度,这使得权重值的分布更加规则。

  • L1 正则化( L1 regularization):添加的成本与权重系数的绝对值成正比
  • L2 正则化( L2 regularization):添加的成本与权重系数的平方(权重的 L2 范数)成正比。神经网络的 L2 正则化也叫权重衰减( weight decay)。不要被不同的名称搞混,权重衰减与 L2 正则化在数学上是完全相同的。
 from keras import regularizers
model = models.Sequential()
model.add(layers.Dense(16, kernel_regularizer=regularizers.l2(0.001),activation='relu', input_shape=(10000,)))
model.add(layers.Dense(16, kernel_regularizer=regularizers.l2(0.001),activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

L2(0.001) 的意思是该层权重矩阵的每个系数都会使网络总损失增加 0.001 * weight_
coefficient_value。注意,由于这个惩罚项只在训练时添加,所以这个网络的训练损失会
比测试损失大很多。
同时添加L1和L2正则化

regularizers.l1(0.001)
regularizers.l1_l2(l1=0.001, l2=0.001)

3.添加 dropout 正则化

对某一层使用 dropout,就是在训练过程中随机将该层的一些输出特征舍弃(设置为 0)

model = models.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=(10000,)))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(16, activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(1, activation='sigmoid'))

参考书籍:《python深度学习》

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值