Tensorflow如何在没有功能的情况下手动执行l2正则化并使用add_loss?

时间:2019-03-22 20:40:22

标签: tensorflow loss-function

我必须在不使用tf.contrib.layers.l2_regularizer的情况下构建l2 regualarizer。相反,我必须使用给定的提示: tf.losses.add_loss并添加到集合tf.GraphKeys.REGULARIZATION_LOSSES。

我是张量流的新手,对如何实现它一无所知。如果有人可以帮助我,那将是很棒的。我正在使用python 3.6 我不知道下面的代码应该造成什么损失

def __eq__(self, other):
    # Protect against comparisons of other classes.
    if not isinstance(other, __class__):
        return NotImplemented

    return self.value == other.value and self.suit == other.suit

1 个答案:

答案 0 :(得分:0)

tf.contrib.layers.l2_regularizer基本上只适用tf.nn.l2_loss。因此,您可以将其应用于体重,

W = tf.get_variable('W', dtype, shape=[input_dim, num_units], initializer)

或使用其公式output = sum(W ** 2) / 2 tf.nn.l2_loss不会将其输出添加到损失收集中。因此,您需要手动进行操作。

l2 = tf.nn.l2_loss(W)
tf.losses.add_loss(l2, loss_collection=tf.GraphKeys.REGULARIZATION_LOSSES)

之后,您可以使用

检查该集合的内容
tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES) 

tf.losses.get_regularization_loss()

将此损失添加到您的主要损失功能中。希望这可以使它更清晰