4.5添加权重正则化
- 简单模型比复杂模型更不容易过拟合
- 简单模型指参数值的熵更小的模型或者参数更少的模型,因此一种常见的降低过拟合的方法就是强制让模型权重只能取较小的值,从而限制模型的复杂度
- L1正则化:添加的成本与权重系数的绝对值成正比
- L2正则化:添加的成本与权重系数的平方成正比,也称权重衰减
向模型添加L2权重正则化
from keras import regularizers
model = models.Sequential()
model.add(layers.Dense(16,kernel_regularizer=regularizers.12(0.001), #12(0.001)指该层权重矩阵的每个系数都会是网络总损失增加0.001*weight_coefficient_value 由于这个惩罚项旨在训练时添加,所以这个网络的训练损失会比测试损失大很多
activation='relu',input_shape=(10000,)))
model.add(layers.Dense(16,kernel_regularizer=regularizers.12(0.001),
activation='relu'))
model.add(layers.Dense(1,activation='sigmoid'))
也可以用keras 中以下这些权重正则化来代替L2正则化
Keras 中不同的权重正则化项
from keras import regularizers
regularizers.11(0.001) #L1正则化
regularizers.11_12(11=0.001,12=0.001) #同时做L1和L2正则化
4.6添加dropout 正则化
- 对某一层使用dropout,就是在训练过程中随机将该层的一些输出特征舍弃(设置为0)
- dropout比率 是被设为0的特征所占的比例,通常在0.2~0.5范围内
- 测试时没有单元被舍弃,而该层的输出值需要按dropout比率缩小,因为这时比训练时有更多的单元被激活,需要加以平衡
向IMDB网络中添加dropout
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')