web-dev-qa-db-ja.com

損失増加の考えられる説明は?

私は4つの異なる国からの画像の40k画像データセットを持っています。画像には、屋外のシーン、都市のシーン、メニューなど、さまざまな主題が含まれています。ディープラーニングを使用して画像にジオタグを付けたかったのです。

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

私の損失はこれをしています(3層と6層の両方のネットワークで): enter image description here

損失は​​実際にはある程度スムーズに始まり、数百ステップで減少しますが、その後忍び寄ります。

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

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

9
JohnAllen

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

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

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

4
chasep255

私も問題に直面していました、私はkerasライブラリ(tensorflowバックエンド)を使用していました

    Epoch 00034: saving model to /home/ubuntu/temp/trained_data1/final_dev/final_weights-improvement-34-0.627.hdf50
Epoch 35/150
226160/226160 [==============================] - 65s 287us/step - loss: 0.2870 - acc: 0.9331 - val_loss: 2.7904 - val_acc: 0.6193
Epoch 36/150
226160/226160 [==============================] - 65s 288us/step - loss: 0.2813 - acc: 0.9331 - val_loss: 2.7907 - val_acc: 0.6268

Epoch 00036: saving model to /home/ubuntu/temp/trained_data1/final_dev/final_weights-improvement-36-0.627.hdf50
Epoch 37/150
226160/226160 [==============================] - 65s 286us/step - loss: 0.2910 - acc: 0.9330 - val_loss: 2.5704 - val_acc: 0.6327
Epoch 38/150
226160/226160 [==============================] - 65s 287us/step - loss: 0.2982 - acc: 0.9321 - val_loss: 2.5147 - val_acc: 0.6415

Epoch 00038: saving model to /home/ubuntu/temp/trained_data1/final_dev/final_weights-improvement-38-0.642.hdf50
Epoch 39/150
226160/226160 [==============================] - 68s 301us/step - loss: 0.2968 - acc: 0.9318 - val_loss: 2.7375 - val_acc: 0.6409
Epoch 40/150
226160/226160 [==============================] - 68s 299us/step - loss: 0.3124 - acc: 0.9298 - val_loss: 2.8359 - val_acc: 0.6047

Epoch 00040: saving model to /home/ubuntu/temp/trained_data1/final_dev/final_weights-improvement-40-0.605.hdf50
Epoch 41/150
226160/226160 [==============================] - 65s 287us/step - loss: 0.2945 - acc: 0.9315 - val_loss: 3.5825 - val_acc: 0.5321
Epoch 42/150
226160/226160 [==============================] - 65s 287us/step - loss: 0.3214 - acc: 0.9278 - val_loss: 2.5816 - val_acc: 0.6444

私のモデルを見たとき、モデルはニューロンが多すぎました。要するに、モデルは過剰適合でした。 2つの高密度層のニューロンの数を減らしました(300ニューロンから200ニューロンに)

1
yunus