Tensorflow - 添加L2正则化损失的简单示例

时间:2016-09-12 23:50:45

标签: python machine-learning tensorflow

我熟悉机器学习,但我正在通过阅读大学的一些幻灯片来学习Tensorflow。下面我只用一个功能设置线性回归的损失函数。我在总损失中添加了L2损失,但我不确定我是否正确执行此操作:

# Regularization
reg_strength = 0.01

# Create the loss function.
with tf.variable_scope("linear-regression"):
    W    = tf.get_variable("W", shape=(1, 1), initializer=tf.contrib.layers.xavier_initializer())
    b    = tf.get_variable("b", shape=(1,), initializer=tf.constant_initializer(0.0))
    yhat = tf.matmul(X, W) + b

    error_loss = tf.reduce_sum(((y - yhat)**2)/number_of_examples)
    #reg_loss   = reg_strength * tf.nn.l2_loss(W)   # reg 1
    reg_loss   = reg_strength * tf.reduce_sum(W**2) # reg 2
    loss       = error_loss + reg_loss

# Set up the optimizer.
opt_operation = tf.train.GradientDescentOptimizer(0.001).minimize(loss)

我的具体问题是:

  1. 我有两行(注释为reg 1reg 2),用于计算权重W的L2损失。标有reg 1的行使用Tensorflow内置函数。这两个L2实现是否相同?

  2. 我是否正确地将正则化损失reg_loss添加到最终损失函数中?

2 个答案:

答案 0 :(得分:2)

几乎

According to the L2Loss operation code

output.device(d) = (input.square() * static_cast<T>(0.5)).sum();

它也乘以0.5(或换句话说,它除以2

答案 1 :(得分:1)

  

这两个L2实现是否相同?

几乎,正如@fabrizioM指出的那样,您可以在TensorFlow文档中看到here对l2_loss的介绍。

  

我是否正确地将正则化损失reg_loss添加到最终损失函数中?

到目前为止一直很好:)