Python 什么时候应该在TensorFlow中使用tf.loss.add_loss()?

Python 什么时候应该在TensorFlow中使用tf.loss.add_loss()?,python,tensorflow,Python,Tensorflow,我在TensorFlow文档中找不到这个问题的答案。我曾经读到,应该添加tf.nn函数中的损耗,但是tf.loss中的函数不需要这样做。因此: 我应该何时使用tf.loss.add_loss() 例如: loss = tf.reduce_mean(tf.nn.sparse_softmax_corss_entropy_with_logits (labels=ground_truth, logits=predictions)) tf.losses.ad

我在TensorFlow文档中找不到这个问题的答案。我曾经读到,应该添加
tf.nn
函数中的损耗,但是
tf.loss
中的函数不需要这样做。因此:

我应该何时使用
tf.loss.add_loss()

例如:

loss = tf.reduce_mean(tf.nn.sparse_softmax_corss_entropy_with_logits
                       (labels=ground_truth, logits=predictions))

tf.losses.add_loss(loss) <-- when is this required?
loss=tf.减少平均值(tf.nn.sparse\u softmax\u corss\u熵)
(标签=地面真理,逻辑=预测)

add_loss(loss)可以使用此方法注册用户定义的损失

也就是说,如果您创建了定义损失的张量,例如
my_loss=tf.mean(output)
,则可以使用此方法将其添加到损失集合中。如果您没有手动跟踪所有损失,您可能希望这样做。例如,如果您正在使用类似
tf.loss.get_total_loss()
的方法

内部
tf.loss.add_loss
非常简单:

def add_loss(loss, loss_collection=ops.GraphKeys.LOSSES):
  if loss_collection and not context.executing_eagerly():
    ops.add_to_collection(loss_collection, loss)

非常感谢。也许您可以解释是否需要将tf.nn中的函数添加到loss集合中,并相应地编辑您的答案。这似乎仍然让我和其他人感到困惑。通过任何一种标准库产生的任何损失都将被添加到损失集合中。因此,没有理由对它们使用add_loss()。如果您自己编写损失函数-这是该方法的一个很好的候选者hi,@y.selivonchyk,谢谢您的回答,我对TensorFlow非常陌生,您所说的“如果您不手动跟踪所有损失,您可能希望这样做”是什么意思?