仅介绍多分类交叉熵损失tf.losses.softmax_cross_entropy以及tf.losses.sparse_softmax_cross_entropy两者区别
tf.losses.softmax_cross_entropy
代码如下:
tf.losses.softmax_cross_entropy(
onehot_labels,
logits,
weights=1.0,
label_smoothing=0,
scope=None,
loss_collection=tf.GraphKeys.LOSSES,
reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)
labels: [batch_size,] .And dtype int32 or int64. Each entry in labels must be an index in [0, num_classes).(非独热码)
tf.nn.softmax_cross_entropy
代码如下:
tf.losses.sparse_softmax_cross_entropy(
labels,
logits,
weights=1.0,
scope=None,
loss_collection=tf.GraphKeys.LOSSES,
reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)
labels: [batch_size, num_classes], each row of labels[i] must be a valid probability distribution.
区别
其区别主要在于,softmax 的label是one-hot编码的,如[0,0,1],[0,1,0],[1,0,0];而sparse它的label是一个可能性最高位置{0,1,2,……,num_classes-1}的索引;
使用one-hot编码可以消除类间相关性:
假设10个分类C0~C9,不用Onehot的话我们就直接给他编号0~9,C0记为0。label之间的距离不同,计算损失的话C0错分成C9的损失是C0错分成C1的损失的9倍,影响模型之间的学习。