如何在tf.losses.sigmoid_cross_entropy中设置参数权重?

时间:2018-02-08 10:05:16

标签: tensorflow cross-entropy

我现在尝试在不平衡的数据集上使用tf.losses.sigmoid_cross_entropy。但是,我对参数权重有点困惑。以下是文档中的注释:

  

权重:可选的Tensor,其等级为0或相同的等级   标签,并且必须可以向标签广播(即,所有尺寸必须   可以是1,也可以是相应的损失维度。)

我知道在tf.losses.softmax_cross_entropy中,参数权重可以是每个样本的权重等级1张量。为什么tf.losses.sigmoid_cross_entropy中的权重必须与标签具有相同的等级?

有人能回答我吗?更好的例子。

1 个答案:

答案 0 :(得分:0)

您希望对您的损失进行加权,因此tensorflow期望您为每个标签提供重量。请考虑以下示例

Labels: [0, 0, 0, 1, 0]  
possible_weights1: [1]
possible_weights2: [1, 2, 1, 1, 1]
illegal_weights1: [1, 2]
illegal_weights2: [[1], [2]]

此处您的标签的排名为1(仅1维),因此tensorflow期望您为标签中的每个元素提供权重(如possible_weights2中所示)或为每个维度提供权重(正如possible_weights1中所示,其被广播到[1, 1, 1, 1, 1]) 但是,如果您的权重为illegal_weights2,那么tensorflow无法理解它应如何处理权重中的两个维度,因为标签中只有一个维度?所以你的等级应该总是相同的 illegal_weights1是秩相同但权重与标签长度不同,长度为1(可以广播)的情况,但长度为2,不能广播,因此是非法的。