文章目录
简介:虽然tf2.0已经诞生一段时间了,但是tf1.x版本还是有非常广泛的使用场景。本文主要对新旧版本中,有关交叉熵损失函数的使用进行辨析,因为本人也是小白一个,不足指出,还请各位指教~
首先,在tensorflow的1.x版本中,由于存在多种api可以使用,包括tf.nn
、tf.contrib
、tf.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