import tensorflow as tf
labels = [[0.2,0.3,0.5],
[0.1,0.6,0.3]]
logits = [[2,0.5,1],
[0.1,1,3]]
a=tf.nn.softmax([2,0.5,1]) # 此行代碼觀看softmax函數如何處理數據,結果表明是按照行進行處理,即ln2/(ln2+ln0.5+ln1)
result1 = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits) # 可以發現此函數只將預測logits進行了softmax,這樣就可以不用對logits數據進行softmax了
logits_scaled = tf.nn.softmax(logits) # 對logits數據進行softmax
result2 = -tf.reduce_sum(labels*tf.log(logits_scaled),1)
result3 = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits_scaled)
with tf.Session() as sess:
print(sess.run(a))
# print(sess.run(logits_scaled))
print(sess.run(result1))
print(sess.run(result2))
print(sess.run(result3))
softmax實際就是將輸入函數帶到一個方程np.power(np.e,xi)/Σnp.power(np.e,xi)中得到,其代碼如下:
[2,0.5,1]
a=np.power(np.e,2)+np.power(np.e,0.5)+np.power(np.e,1)
print(np.power(np.e,2)/a)