102 votes

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

Ma question est simple, quelles sont les données de validation passé à model.fit dans un modèle séquentiel utilisé 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 les hyper-paramètres dans un modèle, mais je pense que cela ne se produit pas ici) ?

Je parle de l'ensemble des validations qui peuvent être passées 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 appelle keras.models.training.fit ce qui crée des variables comme val_acc et val_loss (qui sont accessibles depuis les Callbacks). keras.models.training.fit appelle également keras.models.training._fit_loop qui ajoute les données de validation au fichier callbacks.validation_data et appelle également keras.models.training._test_loop qui bouclera les données de validation par lots sur le site de l'entreprise. self.test_function du modèle. Le résultat de cette fonction est utilisé pour remplir les valeurs des logs, qui sont les valeurs accessibles depuis les callbacks.

Après avoir vu tout cela, j'ai l'impression que l'ensemble de validation transmis à model.fit n'est pas utilisé pour valider quoi que ce soit pendant l'apprentissage, et sa seule utilité est d'obtenir un retour sur la façon dont le modèle formé se comportera à chaque époque pour un ensemble complètement indépendant. Par conséquent, il serait normal d'utiliser le même ensemble de validation et de test, n'est-ce pas ?

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

110voto

petezurich Points 3505

Si vous voulez construire un modèle solide, vous devez suivre ce protocole spécifique qui consiste à diviser 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înez sur vos données d'entraînement et que vous ajustez votre modèle en fonction des résultats des mesures (précision, perte, etc.) que vous obtenez de votre ensemble de validation.

Votre modèle ne "voit" pas votre ensemble de validation et n'est en aucun cas entraîné sur celui-ci. mais c'est vous, en tant qu'architecte et maître des hyperparamètres, qui ajustez le modèle en fonction de ces données. Il influence donc indirectement votre modèle, car il influence directement vos décisions de conception. Vous donnez un coup de pouce à votre modèle pour qu'il fonctionne bien avec les données de validation et cela peut éventuellement apporter une inclinaison.

C'est exactement la raison pour laquelle 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 groupe de données, votre ensemble de test.

Seule cette procédure vous permet d'obtenir une vue non affectée de la qualité de votre modèle et de sa capacité à généraliser ce qu'il a appris sur des données totalement inédites.

32voto

blackHoleDetector Points 1079

Cette vidéo YouTube explique ce qu'est un ensemble de validation, pourquoi il est utile, et comment mettre en œuvre un ensemble de validation dans Keras : Créer un ensemble de validation dans Keras

Avec un ensemble de validation, vous retirez essentiellement une fraction de vos échantillons de votre ensemble de formation, ou vous créez un ensemble entièrement nouveau, et vous excluez les échantillons de cet ensemble de la formation.

Au cours de chaque époque, le modèle sera entraîné sur les échantillons de l'ensemble d'entraînement, mais ne sera PAS entraîné sur les échantillons de l'ensemble de validation. Au lieu de cela, le modèle sera seulement validation de sur chaque échantillon de l'ensemble de validation.

Le but est de vous permettre de juger de la capacité de généralisation de votre modèle. En d'autres termes, dans quelle mesure votre modèle est-il capable de prédire des données qu'il n'a pas vues pendant son apprentissage.

Le fait de disposer d'un ensemble de validation permet également de savoir si votre modèle est surajusté ou non. Ceci peut être interprété en comparant les acc et loss de vos échantillons de formation à la val_acc et val_loss 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 surajusté.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X