web-dev-qa-db-ja.com

Kerasモデルフィッティングで損失acc val_loss val_accを理解する方法

私はKerasを初めて使い、モデルの結果を理解する方法について質問があります。ここに私の結果があります:(便宜上、ここに各エポックの後に損失acc val_loss val_accを貼り付けます)

4160サンプルでトレーニングし、1040サンプルで以下のように検証します。

Epoch 1/20
4160/4160 - loss: 3.3455 - acc: 0.1560 - val_loss: 1.6047 - val_acc: 0.4721

Epoch 2/20
4160/4160 - loss: 1.7639 - acc: 0.4274 - val_loss: 0.7060 - val_acc: 0.8019

Epoch 3/20
4160/4160 - loss: 1.0887 - acc: 0.5978 - val_loss: 0.3707 - val_acc: 0.9087

Epoch 4/20
4160/4160 - loss: 0.7736 - acc: 0.7067 - val_loss: 0.2619 - val_acc: 0.9442

Epoch 5/20
4160/4160 - loss: 0.5784 - acc: 0.7690 - val_loss: 0.2058 - val_acc: 0.9433

Epoch 6/20
4160/4160 - loss: 0.5000 - acc: 0.8065 - val_loss: 0.1557 - val_acc: 0.9750

Epoch 7/20
4160/4160 - loss: 0.4179 - acc: 0.8296 - val_loss: 0.1523 - val_acc: 0.9606

Epoch 8/20
4160/4160 - loss: 0.3758 - acc: 0.8495 - val_loss: 0.1063 - val_acc: 0.9712

Epoch 9/20
4160/4160 - loss: 0.3202 - acc: 0.8740 - val_loss: 0.1019 - val_acc: 0.9798

Epoch 10/20
4160/4160 - loss: 0.3028 - acc: 0.8788 - val_loss: 0.1074 - val_acc: 0.9644

Epoch 11/20
4160/4160 - loss: 0.2696 - acc: 0.8923 - val_loss: 0.0581 - val_acc: 0.9856

Epoch 12/20
4160/4160 - loss: 0.2738 - acc: 0.8894 - val_loss: 0.0713 - val_acc: 0.9837

Epoch 13/20
4160/4160 - loss: 0.2609 - acc: 0.8913 - val_loss: 0.0679 - val_acc: 0.9740

Epoch 14/20
4160/4160 - loss: 0.2556 - acc: 0.9022 - val_loss: 0.0599 - val_acc: 0.9769

Epoch 15/20
4160/4160 - loss: 0.2384 - acc: 0.9053 - val_loss: 0.0560 - val_acc: 0.9846

Epoch 16/20
4160/4160 - loss: 0.2305 - acc: 0.9079 - val_loss: 0.0502 - val_acc: 0.9865

Epoch 17/20
4160/4160 - loss: 0.2145 - acc: 0.9185 - val_loss: 0.0461 - val_acc: 0.9913

Epoch 18/20
4160/4160 - loss: 0.2046 - acc: 0.9183 - val_loss: 0.0524 - val_acc: 0.9750

Epoch 19/20
4160/4160 - loss: 0.2055 - acc: 0.9120 - val_loss: 0.0440 - val_acc: 0.9885

Epoch 20/20
4160/4160 - loss: 0.1890 - acc: 0.9236 - val_loss: 0.0501 - val_acc: 0.9827

私の理解は次のとおりです。

  1. 2つの損失(損失とval_lossの両方)は減少しており、牽引acc(accとval_acc)は増加しています。したがって、これはモデリングが良い方法で訓練されていることを示しています。

  2. Val_accは、モデルの予測がどれほど優れているかの尺度です。したがって、私の場合、モデルは6エポック後にかなりよく訓練されたように見え、残りの訓練は必要ありません。

私の質問は:

  1. Acc(トレーニングセットのacc)は、val_accよりも常に小さく、実際にはずっと小さくなります。これは正常ですか?私の考えでは、accは通常val_accよりもよく似ているはずです。

  2. 20エポック後、accはまだ増加しています。したがって、より多くのエポックを使用し、accが増加しなくなったら停止する必要がありますか?または、accの傾向に関係なく、val_accの増加が停止する場所で停止する必要がありますか?

  3. 私の結果について他に考えはありますか?

ありがとう!

17
Rocco

質問に答える:

  1. 公式 keras FAQ で説明されているように

トレーニング損失は、トレーニングデータの各バッチでの損失の平均です。モデルは時間とともに変化するため、エポックの最初のバッチの損失は一般に最後のバッチよりも大きくなります。一方、エポックのテスト損失は、エポックの最後にあるモデルを使用して計算されるため、損失が低くなります。

  1. Val_accの増加が止まったら、トレーニングを停止する必要があります。そうしないと、おそらくモデルがオーバーフィットします。 earlystoppingコールバックを使用して、トレーニングを停止できます。

  2. あなたのモデルは非常に良い結果を達成しているようです。良い仕事を続けてください。

18
Ioannis Nasios