2017-03-07 7 views
4

こんにちは、私はテンソルフローに入り、ちょっと気が気味です。 TFのlog_lossはsklearnのものと異なりますか? tf.log_losssk.log_loss発散を収束しながら、私はTensorflowとScikitlearnの違いlog_loss関数の実装

Epoch 7, Loss:  0.4875 Validation Accuracy: 0.818981 
    sk.log_loss: 1.76533018874 
    tf.log_loss: 0.396557 
Epoch 8, Loss:  0.4850 Validation Accuracy: 0.820738 
    sk.log_loss: 1.77217639627 
    tf.log_loss: 0.393351 
Epoch 9, Loss:  0.4835 Validation Accuracy: 0.823374 
    sk.log_loss: 1.78479079656 
    tf.log_loss: 0.390572 

を取得

from sklearn.metrics import log_loss 

tmp = np.array(y_test) 
y_test_t = np.array([tmp, -(tmp-1)]).T[0] 

tf_log_loss = tf.losses.log_loss(predictions=tf.nn.softmax(logits), labels=tf_y) 

with tf.Session() as sess: 

    # training 

    a = sess.run(tf.nn.softmax(logits), feed_dict={tf_x: xtest, keep_prob: 1.}) 
    print(" sk.log_loss: ", log_loss(y_test, a,eps=1e-7)) 
    print(" tf.log_loss: ", sess.run(tf_log_loss, feed_dict={tf_x: xtest, tf_y: y_test_t, keep_prob: 1.})) 

出力のように思える:ここ

は私のコードからいくつかの行は、私が計算していますか、です。

+0

この機能に関する質問。オートエンコーダーで使用できますか?つまり、予測とラベルの両方が等しいサイズの画像ですか? – Qubix

答えて

0

私は同じ問題を抱えていました。 tf.losses.log_lossのソースコードを検索した後、そのkey linesショーワットが起こっている:

losses = - math_ops.multiply(labels, math_ops.log(predictions + epsilon)) 
    - math_ops.multiply((1 - labels), math_ops.log(1 - predictions + epsilon)) 

それは、バイナリログ損失(つまり、すべてのクラスは、非排他的と考えられている)のではなくマルチクラスの対数であります損失

私は確率(ロジットではなく)で作業していたので、tf.nn.softmax_cross_entropy_with_logitsを使用することはできませんでした(ただし、対数を適用できました)。 私の解決策は手でログイン損失を実装しました:

loss = tf.reduce_sum(tf.multiply(- labels, tf.log(probs)))/len(probs) 

も参照してください: