开发者

解读keras中的正则化(regularization)问题

目录
  • keras中正则化(regularization)
    • keras内置3种正则化方法
    • 3个正则化关键字
  • keras中添加正则化
  • 总结

    keras中正则化(regularization)

    keras内置3种正则化方法

    keras.regularizers.l1(lambda)
    keras.regularizers.l2(lambda)
    keras.regularizers.l1_l2(l1=lambda1, l2=lambda2)

    目前我的理解是lambda越大,对参数的约束就越强,也就是惩罚力度越大。

    其中L1正则化方法,是对|w|进行惩罚,使得w趋近0

    而L2正则化方法,是对w2进行惩罚,使得w尽可能小

    Dense,Conv1D,Conv2D,Conv3D有统一的正则化API,见keras中文文档。

    3个正则化关键字

    1. kernel_regularizer

    对权值进行正则化,大多数情况下使用这个

    2. bias_regularizer

    限制bias的大小,使得输入和输出接近

    3. activity_regularizer

    对输出进行正则化,使得输出尽量小

    keras中添加正则化

    正则项

    正则项在优化过程中层的参数或层的激活值添加惩罚项,这些惩罚项将与损失函数一起作为网络的最终优化目标

    惩罚项基于层进行惩罚,目前惩罚项的接口与层有关,但Dense, Conv1D, Conv2D, Conv3D具有共同的接口。

    这些层有三个关键字参数以施加正则项:

    • kernel_regularizer:施加在权重上的正则项,为keras.regularizer.Regularizer对象
    • bias_regularizer:施加在偏置向量上的正则项,为keras.regularizer.Regularizer对象
    • activity_regularizer:施加在输出上的正则项,为keras.regularizer.Regularizer对象

    例子

    from keras import regpythonularizers
    model.add(Dense(64, input_dim=64,
            kernel_regularizer=regularizers.l2(0.01),
            activity_regularizer=regularizers.l1(0.01)))

    可用正则项

    keras.regularizers.l1(0.)
    keras.regularizers.l2(0.)
    keras.regularizers.l1_l2(0.)

    开发新的正则项

    任何以权重矩阵作为输入并返回js单个数值的函数均可以作为正则项,示例:

    from keras import backend as K
    
    def l1_reg(weight_matrix):
      r编程eturn 0.01 * K.sum(K.abs(we编程客栈ight_matrix))
    
    model.add(Dense(64, input_dim=64,
            kernel_regularizer=l1_reg)

    可参考源代码keras/regularizer.py

    总结

    以上为个人经验,希望能给大家一编程个参考,也希望大家多多支持我们。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜