2017-06-09 6 views
0

イメージ分類(バイナリ分類)のための単純なCNNネットワークを実装しました。私はPythonでテンソルフローを使用しています。 私はtf.softmax_cross_entropy_withlogitsをコスト関数として使用しています。私は、私のモデルの出力層から非正規化されたロジットでコスト関数をフィードします。関数は正規化された確率を出力すべきか、あるいは間違っていますか?tf.softmax_cross_entroy_with_logitsの出力は非正規化されていますか?

私のモデルの訓練中に、私はすべての単一の例の印刷コストです。モデルが出力を正しく予測する場合、コストは0.0になります。そうでなければ、コストは非常に大きく、正規化されていません)。クロスエントロピーを計算する前に関数 'softmaxes'が入力されているのに、出力が非正規化されているのはなぜですか?

答えて

2

クロスエントロピー(あなたの損失関数)をsoftmax(ネットの「仮想」出力 - 以下を参照)と誤解しています。ソフトマックスは正規化されていますが、クロスエントロピーはそうではありません。悪い予測にペナルティを課すために任意に高い値を取ることができます。

正規化されていないネット出力をtf.softmax_cross_entropy_with logitsと組み合わせて使用​​すると、実際にはsoftmax出力は観測されません。コスト関数内で処理され、仮想のままです。 softmaxを調べるには、ネットの正規化されていない出力に対してtf.nn.softmaxを明示的に使用して計算することができます。

+0

ありがとうございました。だから何万ドルか何百万というコストは特別なものではありませんか? – Marcin

+0

可能ですが珍しいです。それはあなたの損失を減らすことを意味するのではなく、合計を使用しているというサインかもしれません。 – user1735003

+0

私は現在、ウエイトを正則化しており、ドロップアウトレイヤーを追加していますが、まだ問題は残ります。 cnnの出力で巨大なログが非常に小さなデータセット(500例ですか?)によって引き起こされている可能性はありますか?私はロジットのsoftmaxをチェックしており、関数は常に1.0または0.0を返します。 – Marcin

関連する問題