2016-07-20 12 views
2

softmaxの出力対ターゲットからの損失を計算する必要があります。 私のターゲットは[0,0,1]に似ており、出力は[0.3,0.3,0.4]です。 目的は予測です。しかし、以下のタイプのコスト関数は、どのように私は簡単にTF自体に[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]))) 

のこの種を考慮していませんか?

答えて

7

2つの確率分布の比較に使用される典型的な損失関数は、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

ありがとう。低い担当者のために、私はupvote.btw多くのご尊敬をcudn't – jolly

関連する問題