我在许多可用的使用TensorFlow实现的神经网络代码中发现,正则化项通常是通过在损失值中添加一个附加项来实现的。
我的问题是:
get_variable有一个论点,regularizer。它应该如何使用?根据我的观察,如果我们将正则化项传递给它(例如tf.contrib.layers.l2_regularizer ),将计算一个表示正则项的张量,并将其添加到一个名为tf.GraphKeys.REGULARIZATOIN_LOSSES的图集合中。该集合会被TensorFlow自动使用(例如,在培训时被优化器使用)?还是希望我自己使用这些藏品?发布于 2016-05-10 15:47:09
正如您在第二点中所说的,使用regularizer参数是推荐的方法。您可以在get_variable中使用它,也可以在variable_scope中设置一次,并将所有变量规范化。
损失收集在图表中,您需要手动将它们添加到成本函数中,如下所示。
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)希望这能帮上忙!
发布于 2017-04-10 16:50:23
对我来说,现有答案的几个方面还不清楚,下面是一个逐步的指南:
weights = tf.Variable(...)构造函数创建变量,然后使用tf.add_to_collection(tf.GraphKeys.REGULARIZATION_LOSSES, weights)创建变量。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)。发布于 2018-01-03 11:05:58
我会提供一个简单的正确答案,因为我没有找到一个。您需要两个简单的步骤,其余步骤由tensorflow魔术完成:
https://stackoverflow.com/questions/37107223
复制相似问题