2016-08-02 11 views
5

私は機械学習が初めてで、3つの畳み込みレイヤーと1つの完全に接続されたレイヤーを持つ畳み込みニューラルネットを訓練しようとしています。私は25%のドロップアウト確率と0.0001の学習率を使用しています。私は6000 150x200のトレーニング画像と13の出力クラスを持っています。私はテンソルフローを使用しています。私は損失が着実に減少している傾向に気付いていますが、私の正確さはほんの少ししか上昇せず、その後再び下がります。私のトレーニングイメージは青い線で、私の検証イメージはオレンジ色の線です。 x軸はステップです。 enter image description hereなぜ畳み込みニューラルネットワークで低損失が可能であるが、精度は非常に低いのですか?

そこに私は理解していないです何かがあるか、この現象の原因何ができるかどうかは疑問に思って?私が読んだ資料から、低損失は高い精度を意味すると仮定しました。 ここに私の損失機能があります。 損失精度が全く異なる2つの事柄(よく、少なくとも論理的に)しているため!である

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y)) 
+1

これまでに聞いたことがありますか? – sascha

+1

訓練の喪失が少ないことは、訓練のセットエラーが低いことを意味するはずです。あなたの損失はどれくらいですか?あなたの尺度は何百万もありますが、あなたの訓練の損失がグラフからわずかに(1未満)低いことは明らかです –

+0

はい、私は過度のフィッティングについて聞いたことがありますが、あなたがフィットしすぎると、トレーニングデータ。申し訳ありませんが、私の喪失は、私がトレーニングを終えた1〜10の間でした。 –

答えて

4

あなたは自動的にlossaccuracy増加を最小限にしようとすると、この場合

loss = (1-accuracy) 

は、あなたのようにlossを定義している例を考えてみましょう。それはどんな意味がありませんが、それは技術的にはまだ有効な損失関数であり、あなたのweightsはまだそのようlossを最小限にするために調整されてい

loss = average(prediction_probabilities) 

は今、あなたのようにlossを定義する別の例を考えてみましょう。

このように、この場合、lossaccuracyの間には関係がないため、同時に両方を増減することは期待できません。

注:Lossは常に最小化されます(したがって、各反復後にlossが減少します)。

PS:最小化しようとしているloss機能で質問を更新してください。

+2

OPは、softmax出力でマルチクラスログロスを使用しているとコメントしました。 –

+0

@Sangramねえ!私は 'loss = average(prediction_probabilities)'が最小化されれば、私の 'prediction_probabilities'が地面の真理に近づいていることを意味しているのだろうかと疑問に思っていました。 – deeplearning

+0

本当は! ** loss = average(prediction_probabilities)**を最小化しようとすると、ネットワーク出力がゼロになる傾向があり、これが精度とは無関係になるように重みが調整されます。ネットワークが特定のクラス(例えば陽性クラスについて)に対して予測確率を正確にゼロに出力する場合、その精度はそのクラスの蔓延に過ぎない。 – Sangram

1

softmax_cross_entropy_with_logits()及び精度が異なる式の定義を有する2つの異なる概念です。通常の場合、ソフトマックスクロスエントロピーを最小限に抑えて精度を向上させることが期待できますが、それらはさまざまな方法で計算されるため、常に同期して増減することは期待できません。

それは、ニューラルネットワークのトレーニングのための効果的ですので、私たちは、CNNでのソフトマックスクロスエントロピーを使用しています。損失関数として損失=(1精度)を使用すると、現在成熟しているバックプロジェクショントレーニングソリューションを使用したCNNニューラルネットワークの重みを調整することでより良い結果を得ることは非常に困難です。実際に行ってこの結論を確認しました。自分で試してみてください。おそらくそれは我々のニューロンの定義(他のタイプのニューロンに変更する必要があります)によって引き起こされているかもしれませんが、とにかく、現時点では、損失関数の精度を使用することは効果的な方法ではありませんこれらのAI科学者が私たちに語ったようにsoftmax_cross_entropy_with_logits()を使用するだけで、彼らはすでにこの方法が有効であることを確認しました。他の方法では、まだわかりません。

+0

私は現在、新しいオンライントレーニングを学んでおり、なぜsoftmax_cross_entropy_with_logits()を使用する必要があるのか​​を新たに理解しています。理由は非常に簡単です:ソフトマックスクロスエントロピー関数は凸関数ですが、ほとんどの関数はそうではありません。そこで、凸関数で極小値を求めることで大域的な最小値を見つけることができました。しかし、非凸関数の場合、例えば、損失=(1精度)、それは複数の極小値を持っているので、私たちのバックプロパゲーションアルゴリズムで適切なW&b値を見つけることは不可能です。 –

関連する問題