首先发现
tf.losses.sigmoid_cross_entropy
tf.losses.softmax_cross_entropy
tf.keras.losses.CategoricalCrossentropy
都是不行的
kl_compute = tf.keras.losses.KLDivergence(
reduction=losses_utils.ReductionV2.NONE,
name='KL_divergence')
# logits 是 [batch_size, class_number]
# gt_labels 是 [batch_size, class_number], 里面有多个1,其余为0
# gt_label_weights 是 [batch_size, class_number], 里面有上面每个1的权重,其余为0
loss = tf.reduce_mean(kl_compute(gt_labels * tf.sigmoid(gt_label_weights),
tf.nn.softmax(logits)))