私の質問は簡単です検証データとは順次モデルの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.fit
がkeras.models.training.fit
を呼び出し、val_acc
やval_loss
(コールバックからアクセス可能)などの変数を作成することがわかりました。 keras.models.training.fit
もkeras.models.training._fit_loop
を呼び出して、検証データをcallbacks.validation_data
に追加し、keras.models.training._test_loop
を呼び出して、self.test_function
で検証データをバッチでループします。モデルの。この関数の結果は、コールバックからアクセス可能な値であるログの値を埋めるために使用されます。
これをすべて確認した後、model.fit
に渡された検証セットはトレーニング中の検証に使用されず、唯一の用途は、完全に独立したセットのすべてのエポックでトレーニングされたモデルがどのように実行されるかについてのフィードバックを取得することです。したがって、同じ検証とテストセットを使用するのは大丈夫でしょうか?
Model.fitで設定された検証がコールバックから読み取られる以外の目的を持っているかどうかを確認できますか?
ソリッドモデルを構築する場合は、データを3つのセットに分割する特定のプロトコルに従う必要があります。1つはtraining、1つはvalidation、もう1つは最終評価、これはテストセットです。
アイデアは、トレーニングデータをトレーニングし、検証セットから得られるメトリック(精度、損失など)の結果でモデルを調整することです。
モデルは検証セットを「認識」せず、トレーニングされていません、しかし、ハイパーパラメータのアーキテクトおよびマスターとしてのあなたは、このデータに従ってモデルを調整します。 したがって、設計の決定に直接影響するため、モデルに間接的に影響します。検証データとうまく機能するようにモデルを微調整し、傾斜をもたらす可能性があります。
まさにそれが、モデルも自分も使用したことのないデータのモデル最終スコアのみを評価する理由であり、それがデータの3番目のチャンクであるテストセットです。
この手順によってのみ、モデルの品質と、まったく見えないデータで学んだことを一般化する能力の影響を受けないビューを取得できます。
このYouTubeビデオでは、検証セットとは何か、それが役立つ理由、およびKerasで検証セットを実装する方法について説明しています。 Kerasで検証セットを作成する
検証セットでは、基本的にトレーニングセットからサンプルの一部を取り出すか、まったく新しいセットを一緒に作成し、トレーニングからこのセットのサンプルを保持します。
各エポック中に、モデルはトレーニングセットのサンプルでトレーニングされますが、検証セットのサンプルでトレーニングされません。代わりに、モデルは検証セットの各サンプルでのみvalidatingになります。
これを行う目的は、モデルがどれだけうまく一般化できるかを判断できるようにすることです。つまり、トレーニング中に見られないデータをモデルがどれだけうまく予測できるかということです。
検証セットを持つことは、モデルが過適合であるかどうかの優れた洞察も提供します。これは、トレーニングサンプルのacc
とloss
を検証サンプルのval_acc
とval_loss
と比較することで解釈できます。たとえば、acc
が高いが、val_acc
が遅れている場合、これはモデルが過剰適合していることを示す良い兆候です。