1. ホーム
  2. python

[解決済み] KerasのSequentialモデルで検証データは何に使うのか?

2023-04-09 17:39:42

質問

私の質問は簡単です。 バリデーションデータとは何ですか? シーケンシャルモデルで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_accval_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つは トレーニング に使うもの、1つは バリデーション 最終評価 であり、これは テストセット .

学習データで学習し、検証セットから得られるメトリクス(精度、損失など)の結果でモデルをチューニングするという考え方です。

モデルは検証セットを見ることができず、どのような形であれ、その上で訓練されたものではありません。

しかし、あなたはハイパーパラメータの設計者であり、マスターとして、このデータに従ってモデルを調整するのです。 したがって、それはあなたの設計上の決定に直接影響を与えるので、間接的にあなたのモデルに影響を与えるのです。 検証データとうまく連動するようにモデルを調整し、それが傾きをもたらす可能性があるのです。

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

この手順によってのみ、モデルの品質と、まったく未知のデータで学習したことを一般化する能力の影響を受けないビューが得られることを確認できます。