为了账号安全,请及时绑定邮箱和手机立即绑定

如何选择张量流中的交叉熵损失?

/ 猿问

如何选择张量流中的交叉熵损失?

如何选择张量流中的交叉熵损失?

分类问题,例如逻辑回归或多项逻辑回归,优化了交叉熵损失。通常,交叉熵层遵循softmax层,其产生概率分布。

在tensorflow中,至少有十几种不同的交叉熵损失函数

  • tf.losses.softmax_cross_entropy

  • tf.losses.sparse_softmax_cross_entropy

  • tf.losses.sigmoid_cross_entropy

  • tf.contrib.losses.softmax_cross_entropy

  • tf.contrib.losses.sigmoid_cross_entropy

  • tf.nn.softmax_cross_entropy_with_logits

  • tf.nn.sigmoid_cross_entropy_with_logits

  • ...

哪个只适用于二进制分类,哪个适用于多类问题?你何时应该使用sigmoid而不是softmax?如何在sparse功能与别人不同,为什么仅是它softmax


查看完整描述

2 回答

?
慕尼黑的夜晚无繁华

但是对于版本1.5,softmax_cross_entropy_with_logits_v2必须使用它,而使用其参数argument key=...如下>

softmax_cross_entropy_with_logits_v2(_sentinel=None, labels=y,\
logits = my_prediction, dim=-1, name=None)


查看完整回答
反对 回复 2019-08-24
?
慕森王

初步事实

  • 在功能意义上,当类的数量等于2时,sigmoid是softmax函数的部分情况。它们都执行相同的操作:将logits(见下文)转换为概率。

    在简单的二进制分类中,两者之间没有太大的区别,但是在多项分类的情况下,sigmoid允许处理非独占标签(也称为多标签),而softmax处理独占类(见下文)。

  • 分对数(也称为得分)是一个与一个类别相关联的原始未缩放的值计算所述概率之前,。就神经网络架构而言,这意味着logit是密集(完全连接)层的输出。

    Tensorflow命名有点奇怪:下面的所有函数都接受logits而不是概率,并自己应用转换(这样更有效)。

Sigmoid函数族

如前所述,sigmoid损失函数用于二进制分类。但是,当类是独立的时,tensorflow函数更通用并允许进行多标签分类。换句话说, 一次tf.nn.sigmoid_cross_entropy_with_logits解决N二进制分类。

标签必须是单热编码的,或者可以包含软类概率。

tf.losses.sigmoid_cross_entropy此外,它允许设置批内重量,即使一些例子比其他例子更重要。 tf.nn.weighted_cross_entropy_with_logits允许设置类权重 (记住,分类是二进制),即使正误差大于负误差。当训练数据不平衡时,这很有用。

Softmax功能家族

这些损失函数应该用于多项互斥分类,即选择一N类。也适用于N = 2

标签必须是单热编码的或者可以包含软类概率:特定示例可以属于具有50%概率的A类和具有50%概率的B类。请注意,严格来说,这并不意味着它属于这两个类,但可以用这种方式解释概率。

就像在sigmoid家庭中一样,tf.losses.softmax_cross_entropy允许设置批内重量,即使一些例子比其他例子更重要。据我所知,从tensorflow 1.3开始,没有内置的方法来设置类权重

[UPD]在tensorflow 1.5中,引入v2版本并且原始丢失已被弃用。它们之间的唯一区别是,在较新的版本中,反向传播发生在logits和标签中(这里讨论为什么这可能有用)。softmax_cross_entropy_with_logits

稀疏函数族

softmax上面的普通一样,这些损失函数应该用于多项互斥分类,即选择一N类。区别在于标签编码:类被指定为整数(类索引),而不是单热矢量。显然,这不允许软类,但是当有数千或数百万个类时它可以节省一些内存。但是,请注意,logits参数必须仍然包含每个类的logits,因此它至少消耗[batch_size, classes]内存。

如上所述,tf.losses版本有一个weights参数,允许设置批内重量。

采样softmax功能系列

这些函数为处理大量类提供了另一种选择。他们不是计算和比较精确的概率分布,而是根据随机样本计算损失估计。

参数weightsbiases指定一个单独的完全连接层,用于计算所选样本的logits。

如上所述,labels不是单热编码,而是具有形状[batch_size, num_true]

采样功能仅适用于培训。在测试时间内,建议使用标准softmax损耗(稀疏或单热)来获得实际分布。

另一种替代损失是tf.nn.nce_loss执行噪声对比估计(如果您有兴趣,请参阅此非常详细的讨论)。我已将此函数包含在softmax系列中,因为NCE保证在极限范围内逼近softmax。


查看完整回答
反对 回复 2019-08-24

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信