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/78161512atom

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

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

'''
输入:
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
相关文章
相关标签/搜索