前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Tensorflow - Cross Entropy Loss

Tensorflow - Cross Entropy Loss

作者头像
AIHGF
修改2020-06-12 16:42:39
2.4K0
修改2020-06-12 16:42:39
举报
文章被收录于专栏:AIUAIAIUAI

Tensorflow - Cross Entropy Loss

Tensorflow 提供的用于分类的 ops 有:

  • tf.nn.sigmoid_cross_entropy_with_logits
  • tf.nn.softmax
  • tf.nn.log_softmax
  • tf.nn.softmax_cross_entropy_with_logits
  • tf.nn.softmax_cross_entropy_with_logits_v2 - identical to the base version, except it allows gradient propagation into the labels.
  • tf.nn.sparse_softmax_cross_entropy_with_logits
  • tf.nn.weighted_cross_entropy_with_logits

其中, 交叉熵相关的损失函数有:

注: logits 表示未归一化处理的概率, 一般是 softmax 的输入, 网络输出层的输出结果.

根据应用场景中,分类目标的独立性与互斥性, 可以选择 sigmoid 或者 softmax 来实现.

1. sigmoid_cross_entropy_with_logits

  • 作用: 计算给定 logits 的交叉熵(也叫 logistic loss). 用于离散分类任务中, 计算概率误差. 其中每个类别标签class间是相互独立, 且不互斥的. 例如, multilabel classification 问题, 每张图片中可能同时包含一头大象和一只狗.
  • 用法: tf.nn.sigmoid_cross_entropy_with_logits( _sentinel=None, # Used to prevent positional parameters. 内部参数, 不使用. labels=None, # 与 logits 类型和尺寸一样的张量 logits=None, # type float32 or float64 的张量 name=None ) # op 名字, 可选参数.

2. weighted_cross_entropy_with_logits

  • 用法:
代码语言:javascript
复制
tf.nn.weighted_cross_entropy_with_logits(
  targets,
  logits,     # float32 or float64 类型的张量
  pos_weight, # 作用于 positive 样本的系数.
  name=None )

3. softmax_cross_entropy_with_logits(弃用)

  • 作用: 计算 logits 和 labels 间的 softmax 交叉熵. 用于离散分类任务中, 计算概率误差. 其中, 所有类别是互斥的(每一个样本只能有一个类别class). 例如, CIFAR-10 数据集中,每张图片有且只能有一个类别标签, 图片只能包含一只狗或一辆卡车, 而不能二者都有. 只适用于单目标的二分类或多分类问题. 虽然所有的类别classes 是互斥的, 但它们对应的概率不须如此. 要求是, labels 的每一行是一个有效的概率分布. 否则, 梯度计算会不正确. 如果是唯一 labels, 即每个样本只能有一个类别标签class, 则可见: sparse_softmax_cross_entropy_with_logits. 该 op 内部对 logits 有 softmax 处理, 效率更高, 因此其输入需要未归一化的 logits. 不需使用 softmax 的输出. 否则, 结果会不正确.
  • 用法:
代码语言:javascript
复制
tf.nn.softmax_cross_entropy_with_logits(
  _sentinel=None,
  labels=None,  # labels[i] 的每一行必须是有效的概率分布.
  logits=None,  # unscaled log 概率值.
  dim=-1,  # 类别class 的维度. 默认为 -1, 表示最后一维.
  name=None )

4.softmax_cross_entropy_with_logits_v2

  • 作用: 同 softmax_cross_entropy_with_logits. logits 和 labels 都会进行BP. 为了避免 labels 的BP, 在送入该函数之前, 将 label 张量传递一个 stop_gradients 参数.
  • 用法:
代码语言:javascript
复制
tf.nn.softmax_cross_entropy_with_logits_v2(
  _sentinel=None,
  labels=None,
  logits=None,
  dim=-1,
  name=None )

5. sparse_softmax_cross_entropy_with_logits

  • 作用: 计算 logits 和labels 间的稀疏 softmax 交叉熵. 用于离散分类任务中, 计算概率误差. 其中所有类别是互斥的(每个样本仅有一个类别标签class). 例如, CIFAR-10 数据集中,每张图片有且只能有一个类别标签, 图片只能包含一只狗或一辆卡车, 而不能二者都有. 同 softmax_cross_entropy_with_logits 和 softmax_cross_entropy_with_logits_v2. 对于该 op, 给定 label 的概率被认为是互斥的. 所以, 不能有 soft 类别classes, 且,对于logits 每一行(即, minibatch 内的每个样本), labels 向量必须给定其对应的单个类别class 的特定索引. 对于每个样本是概率分布的 soft softmax 分类任务, 则可见 softmax_cross_entropy_with_logits. 该 op 内部对 logits 有 softmax 处理, 效率更高, 因此其输入需要未归一化的 logits. 不需使用 softmax 的输出. 否则, 结果会不正确. 一种常用场景是, logits - [batch_size, num_classes], labels - [batch_size]. 也支持高维场景.
  • 用法:
代码语言:javascript
复制
tf.nn.sparse_softmax_cross_entropy_with_logits(
  _sentinel=None,
  labels=None, 
  logits=None,
  name=None
)
 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年05月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Tensorflow - Cross Entropy Loss
    • 1. sigmoid_cross_entropy_with_logits
      • 2. weighted_cross_entropy_with_logits
        • 3. softmax_cross_entropy_with_logits(弃用)
          • 4.softmax_cross_entropy_with_logits_v2
            • 5. sparse_softmax_cross_entropy_with_logits
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档