2017-07-28 10 views
1

私はTensorflowモデルを訓練し、同等のケラスモデルを構築し、学習したウェイトをロードしました。 しかし、私はKeras(例えば、98%と比較してTensorflowで98.5%)で異なる検査精度を得ています。 私はtensorflowで、このように精度を定義している:この矛盾はどこから来るのか、私は混乱していますケラスとテンソルフローは同じウェイトであるがテストの精度は異なる

model.compile(optimizer=tf.train.AdamOptimizer(), loss='categorical_crossentropy', metrics=['accuracy']) 

accuracy = model.evaluate(x=test_images, y=test_labels, batch_size=BATCH_SIZE)

Kerasで
accuracy = tf.cast(tf.equal(tf.argmax(input_labels, 1), tf.argmax(output, 1)), tf.float32) 

私は、その標準的なメトリックを使用していました。

編集:私は答えと確信しなかったので、私はこの不一致の原因となったバグを発見し、それを固定した後、両方のフレームワークは、今と同じ結果を生成するまで、私はより多くのコードに数日を過ごした 予想と同じ重量。 Stackoverflowは私が質問を削除することを許可していないので、私は他の読者の混乱を防ぐためにこの編集を書いています。

+0

あなたが現在の答えに満足できない場合は、あなた自身の答えを投稿する**ことができます。これは質問への答えを編集するよりも良いでしょう。あなたの答えはバグや不一致をどのように修正したかを説明していることを確認してください。 (あなた自身の質問に答えることはいつでもOKです - 実際は励まされます!) –

答えて

0

これは私の実装でのバグでした(私は誤ってTensorflowでいくつかの最適化反復を適用していました)。同じ重さのセットでは、KerasとTensorflowの両方で同じ結果が得られます。

2

考えられる原因の1つは、モデルのドロップアウトレイヤです。

the source codeによれば、内部ランダムロジックはtf.random_uniformによって実装され、sess.run()の各呼び出しでランダムに新しい値を生成します。

+0

はい、そうです、ドロップアウト層があります。しかし、私はすべてのドロップアウトレイヤーがテストフェーズで確定的になり、すべてのノードがオンになっていると考えました。そのため、ランダム性があるべきではありません。それは間違っていますか? – Monaj

+0

私はドロップアウト層を取り除き、依然としてケラとテンソルフローの精度が異なります。しかしながら、ケラスの精度はずっと低い(例えばケロスでは70%、テンソルフローでは90%)。まだ原因を知ることはできません。 – Monaj

+0

私はあなたの最初のコメントのための私の答えを更新しました、2番目のもののために、それは奇妙に見えます、多分あなたはあなたのモデルについてのより多くの情報を投稿することができます。 @Monaj –

関連する問題