我在这里浏览tensorflow API文档.在tensorflow文档中,他们使用了一个名为的关键字logits.它是什么?在API文档的很多方法中,它都是这样编写的
tf.nn.softmax(logits, name=None)
Run Code Online (Sandbox Code Playgroud)
如果写的是什么是那些logits只Tensors,为什么保持一个不同的名称,如logits?
另一件事是我有两种方法无法区分.他们是
tf.nn.softmax(logits, name=None)
tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None)
Run Code Online (Sandbox Code Playgroud)
它们之间有什么区别?这些文档对我来说并不清楚.我知道是什么tf.nn.softmax呢.但不是另一个.一个例子将非常有用.
当试图用sigmoid激活函数得到交叉熵时,两者之间存在差异
loss1 = -tf.reduce_sum(p*tf.log(q), 1)loss2 = tf.reduce_sum(tf.nn.sigmoid_cross_entropy_with_logits(labels=p, logits=logit_q),1)但是当使用softmax激活功能时,它们是相同的.
以下是示例代码:
import tensorflow as tf
sess2 = tf.InteractiveSession()
p = tf.placeholder(tf.float32, shape=[None, 5])
logit_q = tf.placeholder(tf.float32, shape=[None, 5])
q = tf.nn.sigmoid(logit_q)
sess.run(tf.global_variables_initializer())
feed_dict = {p: [[0, 0, 0, 1, 0], [1,0,0,0,0]], logit_q: [[0.2, 0.2, 0.2, 0.2, 0.2], [0.3, 0.3, 0.2, 0.1, 0.1]]}
loss1 = -tf.reduce_sum(p*tf.log(q),1).eval(feed_dict)
loss2 = tf.reduce_sum(tf.nn.sigmoid_cross_entropy_with_logits(labels=p, logits=logit_q),1).eval(feed_dict)
print(p.eval(feed_dict), "\n", q.eval(feed_dict))
print("\n",loss1, "\n", loss2)
Run Code Online (Sandbox Code Playgroud) classification machine-learning tensorflow cross-entropy sigmoid