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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM