• day-17 L1和L2正则化的tensorflow示例


            机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般英文称作ℓ1-norm和ℓ2-norm,中文称作L1正则化L2正则化,或者L1范数L2范数。L2范数也被称为权重衰减(weight decay)。

           一般回归分析中回归ww表示特征的系数,从上式可以看到正则化项是对系数做了处理(限制)。L1正则化和L2正则化的说明如下:

    • L1正则化是指权值向量ww中各个元素的绝对值之和,通常表示为||w||1||w||1
    • L2正则化是指权值向量ww中各个元素的平方和然后再求平方根(可以看到Ridge回归的L2正则化项有平方符号),通常表示为||w||2

            关于二者如何解决机器学习中过拟合问题,可以参考如下链接:

            https://blog.csdn.net/weiyongle1996/article/details/78161512

            https://blog.csdn.net/jinping_shi/article/details/52433975

            tensorflow中提供了两个函数,用于求某个权重w矩阵的L1和L2正则化,下面是代码示例:

    '''
    输入:
    x = [[1.0,2.0]]
    w = [[1.0,2.0],[3,0,4.0]]
    
    输出:
    y = x*w = [[7.0,10.0]]
    l1 = (1.0+2.0+3.0+4.0)*0.5 = 5.0
    l2 = (1.0**2 + 2.0**2 + 3.0**2 + 4.0**2) / 2)*0.5 = 7.5
    '''
    
    import tensorflow as tf
    from tensorflow.contrib.layers import *
    
    w = tf.constant([[1.0,2.0],[3.0,4.0]])
    x = tf.placeholder(dtype=tf.float32,shape=[None,2])
    y = tf.matmul(x,w)
    
    with tf.Session()  as sess:
        init = tf.global_variables_initializer()
        sess.run(init)
        print(sess.run(y,feed_dict={x:[[1.0,2.0]]}))
        print("=========================")
        print(sess.run(l1_regularizer(scale=0.5)(w)))
        #(1.0+2.0+3.0+4.0)*0.5 = 5.0
        print("=========================")
        print(sess.run(l2_regularizer(scale=0.5)(w)))
        #(1.0**2 + 2.0**2 + 3.0**2 + 4.0**2) / 2)*0.5 = 7.5
  • 相关阅读:
    创建桌面快捷方式
    令牌桶在数据通信QoS流量监管中的应用
    cocos2d-x 实现clash of clans多点聚焦缩放场景
    NotePad++ 快捷键中文说明
    2017第24周日
    《自信力~成为更好的自己》晨读笔记
    不知道如何决定的时候就快速决定
    《意外之外》晨读笔记
    《从“为什么”开始》听书笔记
    解决电脑上网问题记录
  • 原文地址:https://www.cnblogs.com/python-frog/p/9416970.html
Copyright © 2020-2023  润新知