Python 如何正则化损失函数?

Python 如何正则化损失函数?,python,tensorflow,machine-learning,Python,Tensorflow,Machine Learning,我正在学习tensorflow,在理解如何正则化代价函数时遇到了一些困难。我已经看过了,我发现了很多不同的答案。有人能告诉我如何规范成本函数吗 我在Coursera上学习了Andrew Ng的机器学习课程,当我在论坛上看的时候,有一件事似乎有所不同。似乎大多数人都将每个权重以及最终成本函数正则化,但在课程中没有提到这一点。哪一个是正确的?基本上,您只需在所需层中定义正则化函数 tf.keras.layers.Conv2D(filters, kerne

我正在学习tensorflow,在理解如何正则化代价函数时遇到了一些困难。我已经看过了,我发现了很多不同的答案。有人能告诉我如何规范成本函数吗


我在Coursera上学习了Andrew Ng的机器学习课程,当我在论坛上看的时候,有一件事似乎有所不同。似乎大多数人都将每个权重以及最终成本函数正则化,但在课程中没有提到这一点。哪一个是正确的?

基本上,您只需在所需层中定义正则化函数

tf.keras.layers.Conv2D(filters,
                       kernel_size,
                       strides=strides,
                       padding=padding,
                       ...
                       kernel_regularizer=tf.keras.regularizers.l2()
                       )
使用估计器API或低级tensorflow,可以将所有正则化器相加为损失值。您可以使用tf.loss.get_regulation_loss获得它,或者将它添加到loss中,或者使用tf.loss.get_total_loss Keras将在内部处理它。

在TensorFlowL2中,使用正则化参数lambda_的Tikhonov正则化可以这样写:

# Assuming you defined a graph, placeholders and logits layer.
# Using cross entropy loss:
lambda_ = 0.1
xentropy = tf.nn.softmax_cross_entropy_with_logits_v2(labels=y, logits=logits)
ys = tf.reduce_mean(xentropy)
l2_norms = [tf.nn.l2_loss(v) for v in tf.trainable_variables()]
l2_norm = tf.reduce_sum(l2_norms)
cost = ys + lambda_*l2_norm
# from here, define optimizer, train operation and train ... :-)

你有正在编写的代码示例吗?@Sharky我主要是想学习这门语言。我有一个脚本,但它还有其他bug,我主要是用它来测试新命令。我只是想知道如何将l2正则化项添加到网络中。你使用的是估计器还是keras?@Sharky我使用的是普通的张量流。我听说过估算器,但从来没有真正研究过它是什么。但是为什么不在最后把l2正则化项加到成本中,而不是把它加到每个权重中,然后把正则化求和?tf.loss.get\u正则化\u loss之间的区别是什么?另外,它不应该是tf.reduce_mean吗?但是为什么不在最后将l2正则化项添加到成本中,而不是将其添加到每个权重中并对正则化进行求和呢它被添加到最后的成本中:成本=ys+lambda_*l2_normal那么,它不应该是tf.reduce_mean吗?-不,它应该是reduce\u sum,因为我们要对平方参数求和。那么tf.loss.get\u正则化\u loss之间的区别是什么可能是为了实现相同的正则化,将每个变量的每个l2范数添加到集合GraphKeys.Regulation_中,同时构造一个图。稍后要访问这些变量,请调用此函数。在我的回答中,我没有向集合添加变量,而是使用tf.trainable_变量访问它们,然后才计算l2范数。