4

まず、データセットをトレーニングとテストに分割します。次に例を示します。

X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.4, random_state=999)

次にGridSearchCV、クロス検証を使用して、最もパフォーマンスの高いモデルを見つけます。

validator  = GridSearchCV(estimator=clf, param_grid=param_grid, scoring="accuracy", cv=cv)

そして、これを行うことで、次のことができます。

モデルは、k-1 個のフォールドをトレーニング データとして使用してトレーニングされます。結果のモデルは、データの残りの部分で検証されます ( scikit-learn.org )

しかし、その後、Keras の機能について読むfitと、ドキュメントにはさらに 2 つの用語が導入されています。

validation_split: 0 から 1 の間の浮動小数点数。検証データとして使用されるトレーニング データの一部。モデルはトレーニング データのこの部分を分離し、トレーニングは行わず、各エポックの終わりにこのデータの損失とモデル メトリックを評価します。検証データは、シャッフルする前に、提供された x および y データの最後のサンプルから選択されます。

validation_data: 各エポックの終わりに損失とモデル メトリックを評価するタプル (x_val, y_val) またはタプル (x_val, y_val, val_sample_weights)。モデルはこのデータでトレーニングされません。validation_data は validation_split をオーバーライドします。

私が理解していることから、validation_split(によってオーバーライドされるvalidation_data) は変更されていない検証データセットとして使用され、その間、各交差検証ステップ中に交差検証で設定されたホールドアウトが変更されます。

  • 最初の質問: 使用する必要がありますか、validation_splitまたはvalidation_data既にクロス検証を行っているためですか?
  • 2 番目の質問:必要でない場合は、validation_splitandvalidation_dataをそれぞれ 0 と None に設定する必要がありますか?

    grid_result = validator.fit(train_images, train_labels, validation_data=None, validation_split=0)
    
  • 質問 3:その場合、トレーニング中に何が起こりますか? Keras は単に検証ステップを無視しますか?

  • 質問 4:はまたはに属しますか、それともモデルのトレーニングに使用されることのない「テスト セット」( の場合のように) と見なされますか。validation_splitk-1 foldshold-out foldcross validation

4

1 に答える 1

4

モデルがデータセットに過剰適合しておらず、新しいデータに一般化されることを確認するために、検証が実行されます。パラメータ グリッド検索では検証も行っているため、トレーニング中に Keras モデル自体で検証ステップを実行する必要はありません。したがって、あなたの質問に答えるには:

クロスバリデーションを既に行っているため、validation_split または validation_data を使用する必要がありますか?

いいえ、上で述べたとおりです。

必要がない場合、validation_split と validation_data をそれぞれ 0 と None に設定する必要がありますか?

いいえ、デフォルトでは Keras では検証が行われないためです (つまり、デフォルトではvalidation_split=0.0, validation_data=Noneinfit()メソッドがあります)。

もしそうしたら、トレーニング中に何が起こるでしょうか?Keras は単純に検証ステップを無視しますか?

はい、Keras はモデルのトレーニング時に検証を実行しません。ただし、前述したように、グリッド検索手順は検証を実行して、特定のパラメーター セットを使用したモデルのパフォーマンスをより適切に推定することに注意してください。

于 2018-11-07T13:41:45.097 に答える