web-dev-qa-db-fra.com

À quoi servent les données de validation dans un modèle séquentiel de Keras?

Ma question est simple, quelles sont les données de validation passé à model.fit dans un modèle séquentiel tilisé pour?

Et cela affecte-t-il la façon dont le modèle est formé (normalement, un ensemble de validation est utilisé, par exemple, pour choisir des hyper-paramètres dans un modèle, mais je pense que cela ne se produit pas ici)?

Je parle de l'ensemble de validation qui peut être passé comme ceci:

# 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))

J'ai enquêté un peu, et j'ai vu que keras.models.Sequential.fit appels keras.models.training.fit, qui crée des variables comme val_accet val_loss (accessible depuis les rappels). keras.models.training.fit appelle également keras.models.training._fit_loop, qui ajoute les données de validation au callbacks.validation_data, et appelle également keras.models.training._test_loop, qui bouclera les données de validation par lots sur le self.test_function du modèle. Le résultat de cette fonction est utilisé pour renseigner les valeurs des journaux, qui sont les valeurs accessibles à partir des rappels.

Après avoir vu tout cela, j’ai le sentiment que le jeu de validation est passé à model.fit n'est pas utilisé pour valider quoi que ce soit pendant la formation, et sa seule utilisation est d'obtenir des informations sur la performance du modèle formé à chaque époque pour un jeu complètement indépendant. Par conséquent, il serait acceptable d’utiliser les mêmes ensembles de validation et de test, non?

Quelqu'un pourrait-il confirmer si la validation définie dans model.fit a un autre objectif que d'être lue à partir des rappels?

31
danidc

Si vous voulez construire un modèle solide, vous devez suivre ce protocole spécifique de fractionnement de vos données en trois ensembles: un pour formation, un pour validation et un pour évaluation finale, qui est l'ensemble de test.

L'idée est que vous vous entraîniez sur vos données d'entraînement et que vous ajustiez votre modèle aux résultats des métriques (précision, perte, etc.) que vous obtenez de votre jeu de validation.

Votre modèle ne "voit" pas votre jeu de validation et n’est en aucune façon formé à ce sujet, mais vous, en tant qu’architecte et maître des hyperparamètres, réglez le modèle en fonction de ces données. Par conséquent, cela influence indirectement votre modèle car il influence directement vos décisions de conception. Vous incitez votre modèle à bien fonctionner avec les données de validation, ce qui peut éventuellement générer une inclinaison.

C’est précisément pour cette raison que vous n’évaluez le score final de vos modèles que sur des données que ni votre modèle ni vous-même n’avez utilisées - et c’est le troisième bloc de données, votre ensemble de tests.

Seule cette procédure garantit que vous obtenez une vue non affectée de la qualité de vos modèles et une capacité à généraliser ce qui a été appris sur des données totalement invisibles.

35
petezurich

Cette vidéo YouTube explique ce qu'est un jeu de validation, pourquoi il est utile et comment implémenter un jeu de validation dans Keras: créer un jeu de validation dans Keras

Avec un ensemble de validation, vous prélevez une fraction de vos échantillons de votre ensemble d’entraînement ou créez un tout nouvel ensemble, et vous conservez les échantillons de cet ensemble lors de l’entraînement.

Au cours de chaque époque, le modèle sera formé sur des échantillons du jeu de formation, mais NE sera PAS formé sur des échantillons du jeu de validation. Au lieu de cela, le modèle ne validera que sur chaque échantillon du jeu de validation.

Cela vous permet de déterminer dans quelle mesure votre modèle peut généraliser. En d'autres termes, votre modèle est-il capable de prédire sur des données que celles-ci ne sont pas visualisées lors de la formation?.

Avoir un jeu de validation fournit également un excellent aperçu du fait que votre modèle soit sur-ajusté ou non. Ceci peut être interprété en comparant les acc et loss de vos échantillons d'apprentissage au val_acc et val_loss à partir de vos échantillons de validation. Par exemple, si votre acc est élevé, mais votre val_acc est à la traîne, c’est une bonne indication que votre modèle est en surapprentissage.

10
blackHoleDetector