首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于高级API的tensorflow中的L2正则化

基于高级API的tensorflow中的L2正则化
EN

Stack Overflow用户
提问于 2017-12-07 15:06:16
回答 1查看 2.4K关注 0票数 3

我知道在tensorflow的层API中存在一些类似的关于l2正则化的问题,但我仍然不太清楚。

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

代码语言:javascript
复制
regularizer = tf.contrib.layers.l2_regularizer(scale=0.1)
tf.layers.conv2d(kernel_regularizer=)

然后,我可以收集所有正规化损失如下:

代码语言:javascript
复制
regularization_losses = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)

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

代码语言:javascript
复制
1) loss = loss + factor * tf.reduce_sum(regularization_losses)

2) loss = loss + tf.contrib.layers.apply_regularization(regularizer, weights_list=regularization_losses)

还是他们俩都错了?第二个选项似乎很奇怪,因为我必须再次将正则化器作为参数传递,甚至每个层都有一个正则化器作为参数。

编辑

代码语言:javascript
复制
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')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-07 15:11:35

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

代码语言:javascript
复制
reg_losses = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
loss = tf.add_n([base_loss] + reg_losses, name="loss")

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47697988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档