我对机器学习比较熟悉,但我在通过阅读一些大学的幻灯片自学Tensorflow。下面我正在为只有一个特征的线性回归设置损失函数。我正在向总损失中添加L2损失,但我不能确定我是否做得正确:
# 正则化
reg_strength = 0.01
# 创建损失函数。
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
# 设置优化器。
opt_operation = tf.train.GradientDescentOptimizer(0.001).minimize(loss)
我的具体问题是:
-
我有两行代码(注释为
reg 1
和reg 2
)计算权重W
的L2损失。标记为reg 1
的那行使用了Tensorflow内置函数。这两种L2实现是否等价? -
我是否正确地将正则化损失
reg_loss
添加到最终的损失函数中?
回答:
这两种L2实现是否等价?
几乎是的,正如@fabrizioM指出的,你可以在这里查看TensorFlow文档中关于l2_loss的介绍。
我是否正确地将正则化损失reg_loss添加到最终的损失函数中?
到目前为止,一切顺利 : )