我想使用tensorflow内置的交叉熵函数。但是,在文档中,我正在阅读


  不要使用softmax的输出来调用此操作,因为它将产生
  错误的结果。


https://www.tensorflow.org/api_docs/python/tf/nn/softmax_cross_entropy_with_logits

就像经常这样做一样,我在最后一个输出层中使用softmax激活,但是:

result = tf.layers.dense(input=dropout, classes_num, tf.nn.softmax)


因此,使用此功能是否不正确,或者文档不正确?我不明白这一点,感谢您的简短解释。
(那么哪个tensorflow代价函数正确用于softmax输出层?)

最佳答案

由于tf.nn.softmax_cross_entropy_with_logits在内部计算其输入的softmax(以数值稳定的方式),因此必须定义您的网络才能使用线性激活函数:tf.identity

result = tf.layers.dense(input=dropout, classes_num, tf.identity)


此外,一旦对网络进行了训练,并且您想使用模型进行推理,就必须用softmax代替激活。

因此,在您的代码中引入is_training python布尔值变量,并在训练或测试时使用它来更改模型定义。

result = tf.layers.dense(input=dropout, classes_num,
             tf.identity if is_training else tf.nn.softmax)

关于python - Tensorflow“不使用softmax交叉熵”和softmax输出吗?为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47120680/

10-12 21:16