TensorFlow笔记(八)——tf.nn.sigmoid_cross_entropy_with_logits()

函数原型【1】:

tf.nn.sigmoid_cross_entropy_with_logits(
    _sentinel=None, 
    labels=None, 
    logits=None, 
    name=None
)

参数:

  • _sentinel:本质上是不用的参数,不用填
  • labels:和logits具有相同的type(float)和shape的张量(tensor)
  • logits:一个数据类型(type)是float32或float64
  • name:操作的名字,可填可不填

返回值:

  • 长度为batch_size的一维Tensor

注意:如果labels的每一行是one-hot表示,也就是只有一个地方为1,其他地方为0,可以使用tf.sparse_softmax_cross_entropy_with_logits()

作用:

      对于给定的logits计算sigmoid的交叉熵衡量的是分类任务中的概率误差,他也是试用于每一个类别都是相不排斥的(代码中可以看出),例如,有的可以划到多个类别中,给你一张照片,同时包含大象和狗。简单的来说,我们使得x=logits,z=labels,那么误差是【2】:

      Tensorflow交叉熵计算函数输入中的logits是未经缩放的,都不是softmax或sigmoid的输出,而是softmax或sigmoid函数的输入,因为它在函数内部进行sigmoid或softmax操作。

参数labels,logits必须有相同的形状 [batch_size, num_classes] 和相同的类型(float16, float32, float64)中的一种。

例子:

import tensorflow as tf

labels = [[0.2,0.3,0.5],
          [0.1,0.6,0.3]]
logits = [[2,0.5,1],
          [0.1,1,3]]
logits_scaled = tf.nn.softmax(logits)

result1 = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits)
result2 = -tf.reduce_sum(labels*tf.log(logits_scaled),1)
result3 = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits_scaled)

with tf.Session() as sess:
    print(sess.run(result1))
    print(sess.run(result2))
    print(sess.run(result3))

结果:

> [1.4143689 1.6642545]
  [1.4143689 1.6642545]
  [1.1718578 1.1757141]

      上述例子中,labels的每一行是一个概率分布,而logits未经缩放(每行加起来不为1),我们用定义法计算得到交叉熵result2,和套用tf.nn.softmax_cross_entropy_with_logits()得到相同的结果, 但是将缩放后的logits_scaled输tf.nn.softmax_cross_entropy_with_logits(), 却得到错误的结果,所以一定要注意,这个操作的输入logits是未经缩放的。
 

参考:

【1】tf.nn.sigmoid_cross_entropy_with_logits()函数解析:https://blog.csdn.net/TeFuirnever/article/details/88930445

【2】tf.nn.sigmoid_cross_entropy_with_logits():https://blog.csdn.net/m0_37393514/article/details/81393819

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值