3

私は4つの異なる国からの画像の40k画像データセットを持っています。画像には、野外シーン、都市のシーン、メニューなど、さまざまなテーマが含まれています。画像にジオタグを付けるために深く学びたいと思っていました。損失増加の可能性のある説明はありますか?

3つのconv-> relu-> poolレイヤーからなる小さなネットワークから始めて、学習タスクが単純ではないため、ネットワークを深くするために3つを追加しました。

私の損失は、(両方の3と6層のネットワークと)これをやっている:enter image description here

損失が実際に一種の円滑始まり、百数歩のために低下したが、その後忍び寄る開始します。

私の損失がこのように増加する可能性のある説明は何ですか?

私の初期学習率は1e-6と非常に低く設定されていますが、1e-3 | 4 | 5も試しました。私は、クラス別の主題を持つ2つのクラスの小さなデータセットでネットワーク設計を正当にチェックし、損失は必要に応じて継続的に減少します。列車の精度は〜40%です。

答えて

2

通常、あなたの学習率は高すぎますが、それはあなたがそれを排除したように見えます。レイヤーに出入りする数値の大きさを確認する必要があります。 tf.Printを使用すると、そうすることができます。多分あなたは何とか偶然に黒い画像を入力したり、数字が狂っているレイヤーを見つけることができます。

また、クロスエントロピーをどのように計算していますか?ログの中に小さなイプシロンを追加すると、入力値がゼロに近づくにつれて値が無限大になるためです。または、数値安定性を考慮したtf.nn.sparse_softmax_cross_entropy_with_logits(...)関数を使用してください。

クロスエントロピーのコストが非常に高いので、ネットワークがほぼすべてのゼロ(またはゼロに近い値)を出力しているように見えます。あなたがコードを投稿しなかったので、私は理由を言うことができません。私はあなたが偶然にコスト関数の計算で何かをゼロにするかもしれないと思う。

+0

私は 'tf.nn.sparse_softmax_cross_entropy_with_logits(...)FYIを使用しています。 – JohnAllen

+1

私はあなたがいるかもしれないと思った。さもなければ、コストは無限になり、あなたは1億を得るでしょう。何らかの理由で出力が確実にゼロになります。 reluの代わりにeluのアクティベーションを試してみましょう。 – chasep255

+0

私はconvレイヤーで 'tf.nn.elu'sを使い、最後の隠しレイヤーでreluを使います:' hidden = tf.nn.relu(tf.matmul(reshape、fc1_weights)+ fc1_biases) '。おそらく私はそこにeluを試すこともできます。 – JohnAllen