web-dev-qa-db-ja.com

Kerasシーケンシャルモデルで使用される検証データとは何ですか?

私の質問は簡単です検証データとは順次モデルのmodel.fitに渡されます使用される

そして、それはモデルがどのように訓練されるかに影響しますか?

私はこのように渡すことができる検証セットについて話している:

# Create model
model = Sequential()
# Add layers
model.add(...)

# Train model (use 10% of training set as validation set)
history = model.fit(X_train, Y_train, validation_split=0.1)

# Train model (use validation data as validation set)
history = model.fit(X_train, Y_train, validation_data=(X_test, Y_test))

少し調べたところ、keras.models.Sequential.fitkeras.models.training.fitを呼び出し、val_accval_loss(コールバックからアクセス可能)などの変数を作成することがわかりました。 keras.models.training.fitkeras.models.training._fit_loopを呼び出して、検証データをcallbacks.validation_dataに追加し、keras.models.training._test_loopを呼び出して、self.test_functionで検証データをバッチでループします。モデルの。この関数の結果は、コールバックからアクセス可能な値であるログの値を埋めるために使用されます。

これをすべて確認した後、model.fitに渡された検証セットはトレーニング中の検証に使用されず、唯一の用途は、完全に独立したセットのすべてのエポックでトレーニングされたモデルがどのように実行されるかについてのフィードバックを取得することです。したがって、同じ検証とテストセットを使用するのは大丈夫でしょうか?

Model.fitで設定された検証がコールバックから読み取られる以外の目的を持っているかどうかを確認できますか?

31
danidc

ソリッドモデルを構築する場合は、データを3つのセットに分割する特定のプロトコルに従う必要があります。1つはtraining、1つはvalidation、もう1つは最終評価、これはテストセットです。

アイデアは、トレーニングデータをトレーニングし、検証セットから得られるメトリック(精度、損失など)の結果でモデルを調整することです。

モデルは検証セットを「認識」せず、トレーニングされていません、しかし、ハイパーパラメータのアーキテクトおよびマスターとしてのあなたは、このデータに従ってモデルを調整します。 したがって、設計の決定に直接影響するため、モデルに間接的に影響します。検証データとうまく機能するようにモデルを微調整し、傾斜をもたらす可能性があります。

まさにそれが、モデルも自分も使用したことのないデータのモデル最終スコアのみを評価する理由であり、それがデータの3番目のチャンクであるテストセットです。

この手順によってのみ、モデルの品質と、まったく見えないデータで学んだことを一般化する能力の影響を受けないビューを取得できます。

35
petezurich

このYouTubeビデオでは、検証セットとは何か、それが役立つ理由、およびKerasで検証セットを実装する方法について説明しています。 Kerasで検証セットを作成する

検証セットでは、基本的にトレーニングセットからサンプルの一部を取り出すか、まったく新しいセットを一緒に作成し、トレーニングからこのセットのサンプルを保持します。

各エポック中に、モデルはトレーニングセットのサンプルでトレーニングされますが、検証セットのサンプルでトレーニングされません。代わりに、モデルは検証セットの各サンプルでのみvalidatingになります。

これを行う目的は、モデルがどれだけうまく一般化できるかを判断できるようにすることです。つまり、トレーニング中に見られないデータをモデルがどれだけうまく予測できるかということです。

検証セットを持つことは、モデルが過適合であるかどうかの優れた洞察も提供します。これは、トレーニングサンプルのacclossを検証サンプルのval_accval_lossと比較することで解釈できます。たとえば、accが高いが、val_accが遅れている場合、これはモデルが過剰適合していることを示す良い兆候です。

10