原地址:http://blog.csdn.net/niuwei22007/article/details/49228095可以查看更多文章
通过前几篇的介绍,网络已经选择好了优化器、目标函数、模型以及激活函数。并且给权值选择了初始化方法。那么接下来就是训练。训练过程后会出现什么问题呢?过拟合!而有效解决过拟合的方法就是加入规则项。具体的规则化请见http://blog.csdn.net/niuwei22007/article/details/48929935中对于规则化的介绍。
规则化项是一个对于权值参数的惩罚项。它包含在代价函数中。
在Keras的Dense Layer、TimeDistributedDense Layer、MaxoutDense Layer、Convolution1D Layer和Convolution2D Layer中有一个统一的API用来应用规则化项。
上面这些层有3个关键的参数:
这里对W和b的规则化用的同一个类,因为他们的实现方式基本差不多。然而日常使用的时候,很少对b进行规则化。即使对b规则化了,结果只有一点点的改善。因此经常使用的是对W的规则化。
使用示例代码如下:
from keras.regularizers import l2, activity_l2 model.add(Dense(64, input_dim=64, W_regularizer=l2(0.01), activity_regularizer=activity_l2(0.01)))
可用的规则化项类有2个,一个是WeightRegularizer,可以实例化W和b规则化项;另外一个是ActivityRegularizer,可以实例化activity_regularizer。
keras.regularizers.WeightRegularizer(l1=0., l2=0.) keras.regularizers.ActivityRegularizer(l1=0., l2=0.)
其中,这里的预置了l1和l2两种规则化项,也是最常用的两种。L1和 l2代表什么意思呢?如何推导计算的?移步这里。
在keras.regularizers中有几个快捷函数可以使用: