tensorflow中的各种交叉熵损失计算函数辨析(含1.x、2.0版本)

本文详细解析了TensorFlow 1.x和2.0版本中的交叉熵损失函数,包括sparse_softmax_cross_entropy_with_logits、softmax_cross_entropy_with_logits_v2和tf.nn.sigmoid_cross_entropy_with_logits,针对单标签多分类、多标签分类以及二分类的不同场景进行了对比和说明。
摘要由CSDN通过智能技术生成

简介:虽然tf2.0已经诞生一段时间了,但是tf1.x版本还是有非常广泛的使用场景。本文主要对新旧版本中,有关交叉熵损失函数的使用进行辨析,因为本人也是小白一个,不足指出,还请各位指教~

首先,在tensorflow的1.x版本中,由于存在多种api可以使用,包括tf.nntf.contribtf.layers,有时候难免有些混乱,这里先简单介绍一下三者的区别:
(此段引自GitHub Issue下的官方解释,当时2.0版本还没有出现,现在tf.contrib中的功能已经被砍掉或者移动到其他模块下面了)

  • tf.contrib是一些处于research阶段的代码,比较unstable,将来测试稳定后会被移入到tf.layers中,也可能会被弃用或者删除;
  • tf.layers里面是一些已经比较成熟的代码,不会再有太大改动;
  • tf.nn是最基本的代码,实现的功能比较基础,还需要结合其他的API来用。

一、tensorflow 1.x版本中的那些交叉熵损失函数们

1. 用于单标签多分类的sparse_softmax_corss_entropy_with_logits

该函数将未经softmax的网络输出进行softmax后,再与真实的类别标签求解交叉熵损失,并返回损失值。
函数接口:

tf.nn.sparse_softmax_corss_entropy_with_logits(logits, labels, name)
  • 所谓的单标签多分类是指:在多分类任务中,最终只能预测并输出单个类别,不能同时预测多个类别,一张图片预测的要么是horse,要么是dog,不能同时是horse和dog(作为对比,多标签是指,这张图片可能同时是horse和dog);
  • 要求logits shape=[batch_size, num_labels], 而labels shape=[batch_size,],也就是对于logits的每一行,labels是单个数值,指出其对应的真实label标签
  • 注意输入的logits是未经softmax的
  • 返回值的shape和labels相同,为[batch_size,]

附官网解释:
在这里插入图片描述

2. 同样用于单标签多分类的softmax_cross_entropy_with_logits_v2

该函数基本作用与上面一个函数一致。那么二者有什么区别呢?从名称上看,是少了一个sparse,事实上,二者的主要区别在于labels参数的输入形状。现在假设这个batch有2张图片,标签分别为2、3,则二者的labels区别在于

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值