如何在tf.get_variable中使用正则化参数?

时间:2019-07-05 08:12:07

标签: tensorflow

用法的语法很明确:

decay = tf.constant(0.001, dtype=tf.float32)
w = tf.get_variable(name='weight', shape=[512, 512],
                    regularizer=tf.contrib.layers.l2_regularizer(decay))

但是,在文档中仅说明了以下内容:

  

regularizer:一个(张量->张量或无)功能;将其应用于新创建的变量的结果将添加到集合tf.GraphKeys.REGULARIZATION_LOSSES中,并可用于正则化。

以上内容并不意味着正则化损失会自动最小化。那么,我们是否需要从集合tf.GraphKeys.REGULARIZATION_LOSSES中手动获取变量并将其添加到我们的主要损失中才能应用它?

1 个答案:

答案 0 :(得分:2)

  

那么我们是否需要从集合tf.GraphKeys.REGULARIZATION_LOSSES中手动获取变量,并将其添加到我们的主要损失中才能应用它?

是,不是:您需要通过tf.losses.get_regularization_loss()手动获取正则化损失(这将已经获得集合中定义的所有正则化损失,无需在其中搜索变量),然后您只需添加将正则化损失转化为模型损失,并将其用作优化器训练的损失:

logits = model_fn(inputs)
model_loss = your_chosen_loss_function(logits)
regularization_loss = tf.losses.get_regularization_loss()
your_chosen_optimizer.minimize(model_loss + regularization_loss)