2016-07-20 119 views
2

我需要計算softmax輸出vs目標的損失。 我的目標就像[0,0,1]和輸出是[0.3,0.3,0.4] 爲此目的,預測是正確的。但低於類型的成本函數不會考慮這種精度如何將輸出張量轉換爲單熱張量?

self._output = output = tf.nn.softmax(y) 
self._cost = cost = tf.reduce_mean(tf.square(output - tf.reshape(self._targets, [-1]))) 

的我怎麼能輕鬆地輸出[0.3,0.3,0.4]轉化爲[0,0,1]在TF本身?

回答

7

用於比較兩個概率分佈的典型損失函數稱爲cross entropy。 TensorFlow具有實現該損失的tf.nn.softmax_cross_entropy_with_logits函數。你的情況,你可以簡單地做:

self._cost = tf.nn.softmax_cross_entropy_with_logits(
       y, tf.reshape(self._targets, [-1])) 

但是,如果你真的想[0.3, 0.3, 0.4]轉換到一熱表示用於不同的目的,你可以按如下方式使用tf.one_hot功能:

sess = tf.InteractiveSession() 
a = tf.constant([0.3, 0.3, 0.4]) 
one_hot_a = tf.one_hot(tf.nn.top_k(a).indices, tf.shape(a)[0]) 
print(one_hot_a.eval()) 
# prints [[ 0. 0. 1.]] 
+0

謝謝。由於代表低,我cudn't upvote.btw許多問候 – jolly