sigmoid_cross_entropy会产生整批的平均损失吗?

时间:2018-01-24 09:15:09

标签: tensorflow classification multilabel-classification cross-entropy sigmoid

我有一个多标签分类任务,有6个标签。任何样本可能没有或有一些标签为1.我使用了tensorflow中的损失:

self.loss = tf.losses.sigmoid_cross_entropy(self.labels, self.logits)

每次批量(1000)样品进入时,计算损失。

但我不确定损失是否每个预测柱的对数损失的平均值。如果不是,我怎样才能将损失修改为平均值列 - 上面提到的明智的日志损失

2 个答案:

答案 0 :(得分:2)

实际上,它并非完全平均值,或者更确切地说,总是均值。

tf.losses.sigmoid_cross_entropy有一个reduction参数(默认等于Reduction.SUM_BY_NONZERO_WEIGHTS)和一个weights参数(默认情况下为1.0):

  

weights:可选Tensor,其排名为0或与labels相同,且必须可以向labels播放(即所有维度必须为1,或与相应的损失维度相同)。

     

reduction:适用于损失的减少类型。

有几种类型的减少:

  • Reduction.SUM_BY_NONZERO_WEIGHTS计算SUM除以非零权重的数量。
  • Reduction.SUM是加权总和。
  • Reduction.MEAN是加权平均值。
  • Reduction.NONE表示不减少(结果形状与输入相同)。

如您所见,结果取决于两者。是的,当两者都有默认值时,损失等于平均值​​。但如果其中一个是非默认的,例如,其中一个权重为零,则平均值将在非零权重上计算,而不是在整个批次上计算。

答案 1 :(得分:0)

是的,张量流量的任何损失都会影响整批产品。因此,如果分批损失如下

[2, 3, 1, 4]

净亏损将2.5