我在许多可用的神经网络代码中发现,使用TensorFlow实现的正则化项通常是通过在损失值中手动添加一个附加项来实现的。
我的问题是:
有没有比手动操作更优雅或更推荐的正则化方法?
我还发现get_variable
有一个参数regularizer
。该如何使用?根据我的观察,如果我们给它传递一个正则项(比如tf.contrib.layers.l2_regularizer
),一个表示正则项的张量将被计算并添加到名为tf.GraphKeys.REGULARIZATOIN_LOSSES
的图集合中。TensorFlow是否会自动使用该集合(例如,在培训时由优化器使用)?或者我应该自己使用这些收藏品?
正如您在第二点中所说,建议使用
regularizer
参数。您可以在get_variable
中使用它,或者在variable_scope
中设置一次,并使所有变量正则化。损失是在图表中收集的,您需要手动将它们添加到成本函数中,如下所示。
希望能有帮助!
我暂时还不清楚现有答案的几个方面,因此这里有一个循序渐进的指南:
定义正则化器。这是可以设置正则化常数的地方,例如:
通过以下方式创建变量:
等价地,变量可以通过正则的
weights = tf.Variable(...)
构造函数创建,然后是tf.add_to_collection(tf.GraphKeys.REGULARIZATION_LOSSES, weights)
。定义一些
loss
项并添加正则化项:注意:看起来
tf.contrib.layers.apply_regularization
是作为AddN
实现的,所以或多或少相当于sum(reg_variables)
。我会提供一个简单的正确答案,因为我没有找到。你需要两个简单的步骤,其余的由tensorflow magic完成:
创建变量或层时添加正则化:
定义损失时添加正则化项:
相关问题 更多 >
编程相关推荐