tensorflow中的两种损失函数比较

发布于:2022-12-05 ⋅ 阅读:(227) ⋅ 点赞:(0)

仅介绍多分类交叉熵损失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倍,影响模型之间的学习。

 


网站公告

今日签到

点亮在社区的每一天
去签到