基于高级API的张量流L2正则化

2024-10-01 11:37:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道有一些类似的问题,关于二级正则化与层API从tensorflow,但它仍然不太清楚我。在

因此,首先我在conv2d层中重复设置kernel_regularizer,如下所示:

regularizer = tf.contrib.layers.l2_regularizer(scale=0.1)
tf.layers.conv2d(kernel_regularizer=)

然后我可以收集所有的正规化损失,包括:

^{pr2}$

最后,但并非最不重要的是,我必须将正则化项纳入最终损失。但是,在这里我不太确定该怎么做,以下哪一项是正确的?在

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')

Tags: apilayerstfcontribkernel损失化器正则
1条回答
网友
1楼 · 发布于 2024-10-01 11:37:06

第一种方法是正确的。另一种方法是通过tf.add_n函数:

reg_losses = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
loss = tf.add_n([base_loss] + reg_losses, name="loss")

第二种方法也可以,但您必须定义一个单个正则化器。所以它在您的情况下是有效的,但是如果您在不同的层中使用不同的正则化器,可能会不方便。在

相关问题 更多 >