首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在TensorFlow中添加正则化?

如何在TensorFlow中添加正则化?
EN

Stack Overflow用户
提问于 2016-05-09 03:04:56
回答 10查看 82.8K关注 0票数 96

我在许多可用的使用TensorFlow实现的神经网络代码中发现,正则化项通常是通过在损失值中添加一个附加项来实现的。

我的问题是:

  1. 是否有一种比手动更优雅或推荐的正则化方法?
  2. 我还发现get_variable有一个论点,regularizer。它应该如何使用?根据我的观察,如果我们将正则化项传递给它(例如tf.contrib.layers.l2_regularizer ),将计算一个表示正则项的张量,并将其添加到一个名为tf.GraphKeys.REGULARIZATOIN_LOSSES的图集合中。该集合会被TensorFlow自动使用(例如,在培训时被优化器使用)?还是希望我自己使用这些藏品?
EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2016-05-10 15:47:09

正如您在第二点中所说的,使用regularizer参数是推荐的方法。您可以在get_variable中使用它,也可以在variable_scope中设置一次,并将所有变量规范化。

损失收集在图表中,您需要手动将它们添加到成本函数中,如下所示。

代码语言:javascript
复制
  reg_losses = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
  reg_constant = 0.01  # Choose an appropriate one.
  loss = my_normal_loss + reg_constant * sum(reg_losses)

希望这能帮上忙!

票数 70
EN

Stack Overflow用户

发布于 2017-04-10 16:50:23

对我来说,现有答案的几个方面还不清楚,下面是一个逐步的指南:

  1. 定义一个正则化者。这就是可以设置正则化常数的地方,例如: 正则化= tf.contrib.layers.l2_regularizer(scale=0.1)
  2. 通过以下方式创建变量: 权重= tf.get_variable( name=“权重”,regularizer=regularizer,.) 同样,可以通过常规的weights = tf.Variable(...)构造函数创建变量,然后使用tf.add_to_collection(tf.GraphKeys.REGULARIZATION_LOSSES, weights)创建变量。
  3. 定义一些loss术语并添加正则化术语: ( tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES) reg_term = tf.contrib.layers.apply_regularization(regularizer,reg_variables)损失+= reg_term 注意:看起来tf.contrib.layers.apply_regularization是作为一个AddN实现的,因此或多或少相当于sum(reg_variables)
票数 47
EN

Stack Overflow用户

发布于 2018-01-03 11:05:58

我会提供一个简单的正确答案,因为我没有找到一个。您需要两个简单的步骤,其余步骤由tensorflow魔术完成:

  1. 在创建变量或层时添加正则化程序: (x,kernel_regularizer=tf.contrib.layers.l2_regularizer(0.001)) #或tf.get_variable('a',regularizer=tf.contrib.layers.l2_regularizer(0.001)) )
  2. 在定义损失时添加正规术语: 损失= ordinary_loss + tf.losses.get_regularization_loss()
票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37107223

复制
相关文章

相似问题

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