[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