我知道关于使用TensorFlow的层API进行L2正则化有一些类似的问题,但是对我来说仍然不太清楚。
首先,我像这样在我的conv2d
层中多次设置kernel_regularizer
:
regularizer = tf.contrib.layers.l2_regularizer(scale=0.1)
tf.layers.conv2d(kernel_regularizer=)
然后我可以使用以下方式收集所有的正则化损失:
regularization_losses = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
最后但同样重要的是,我需要将正则化项加入到最终损失函数中。然而,在这里我不太确定该怎么做,以下哪一个是正确的?
1) loss = loss + factor * tf.reduce_sum(regularization_losses)
2) loss = loss + tf.contrib.layers.apply_regularization(regularizer, weights_list=regularization_losses)
或者它们两个都错了吗?第二种选择似乎很奇怪,因为我必须再次将正则化器作为参数传递,尽管每层已经有一个正则化器作为参数。
编辑
loss_1 = tf.losses.mean_squared_error(labels=y, predictions=logits, weights=1000)
regularization_loss = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
loss = tf.add_n([loss_1] + regularization_loss, name='loss')
nn.l2
更改为losses.mean_squared_error
,那么损失值的范围完全不同,正则化器如何适应这种情况?还是说这也是我的工作? - user4911648tf.add_n([base_loss] + reg_losses, name="loss")
-->TypeError: Using a tf.Tensor as a Python bool is not allowed.
- user4911648