[tensorflow] tf.nn.sparse_softmax_cross_entropy_with_logits的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[tensorflow] tf.nn.sparse_softmax_cross_entropy_with_logits的使用相关的知识,希望对你有一定的参考价值。

参考技术A 在计算交叉熵之前,通常要用到softmax层来计算结果的概率分布。因为softmax层并不会改变最终的分类结果(排序),所以,tensorflow将softmax层与交叉熵函数进行封装,形成一个函数方便计算:tf.nn.softmax_cross_entropy_with_logits(logits= , labels=)。
为了加速计算过程,针对只有一个正确答案(例如MNIST识别)的分类问题,tensorflow提供了tf.nn.sparse_softmax_cross_entropy_with_logits(logits= , labels=)。

两个函数虽然功能类似,但是其参数labels有明显区别。tf.nn.softmax_cross_entropy_with_logits()中的logits和labels的shape都是[batch_size, num_classes],而tf.nn.sparse_softmax_cross_entropy_with_logits()中的labels是稀疏表示的,是 [0,num_classes)中的一个数值,代表正确分类结果。即sparse_softmax_cross_entropy_with_logits 直接用标签计算交叉熵,而 softmax_cross_entropy_with_logits 是标签的onehot向量参与计算。softmax_cross_entropy_with_logits 的 labels 是 sparse_softmax_cross_entropy_with_logits 的 labels 的一个独热版本(one hot version)。

PS:交叉熵是的log是ln

ValueError: Only call `sparse_softmax_cross_entropy_with_logits` with named a

第五章中完整的训练MNIST数据的神经网络模型的程序代码中,直接运行程序的话会遇到以下的错误。

把下面的这行代码

 

# 计算交叉熵及其平均值
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(y,tf.argmax(y_, 1))

#改为

cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=tf.argmax(y_, 1), logits=y)

  

tf.initialize_all_variables.run()
AttributeError: ‘function‘ object has no attribute ‘run‘

  tf.initialize_all_variables.run()

#改为
tf.global_variables_initializer().run()

 






以上是关于[tensorflow] tf.nn.sparse_softmax_cross_entropy_with_logits的使用的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow中四种不同交叉熵函数tf.nn.softmax_cross_entropy_with_logits()

[吃药深度学习随笔] 交叉熵

交叉熵 相关链接

ValueError: Only call `sparse_softmax_cross_entropy_with_logits` with named a

sparse_softmax_cross_entropy_with_logits

深度学习中分类任务的损失函数详解