我现在尝试在不平衡的数据集上使用tf.losses.sigmoid_cross_entropy
。但是,我对参数权重有点困惑。以下是文档中的注释:
权重:可选的Tensor,其等级为0或相同的等级 标签,并且必须可以向标签广播(即,所有尺寸必须 可以是1,也可以是相应的损失维度。)
我知道在tf.losses.softmax_cross_entropy
中,参数权重可以是每个样本的权重等级1张量。为什么tf.losses.sigmoid_cross_entropy
中的权重必须与标签具有相同的等级?
有人能回答我吗?更好的例子。
答案 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,不能广播,因此是非法的。