11
votes

Comment utiliser évaluation_loop avec train_loop à TF-Slim

J'essaie de mettre en œuvre quelques modèles différents et de les former sur CIFAR-10, et je souhaite utiliser TF-Slim pour le faire. Il semble que TF-Slim ait deux boucles principales utiles lors de la formation: Train_Loop et Evalitoop.

Ma question est la suivante: quelle est la façon canonique d'utiliser ces boucles? En suivant: Est-il possible d'utiliser un arrêt précoce avec train_loop?

J'ai actuellement un modèle et mon fichier de formation Train.py ressemble à ceci xxx

Ce qui est génial jusqu'à présent - mes modèles tous s'entraînent et convergent bien. Je peux voir cela des événements dans train_log_dir où toutes les métriques vont dans la bonne direction. Et aller dans la bonne direction me rend heureux.

Mais j'aimerais vérifier que les métriques s'améliorent également sur l'ensemble de validation. Je ne sais aucune façon de faire avec TF-Slim d'une manière qui joue bien avec la boucle de formation, j'ai donc créé un deuxième fichier appelé eval.py qui contient ma boucle d'évaluation. xxx

questions:

1) J'ai actuellement ce modèle pour l'évaluation_loop Hogging up un GPU entier, mais c'est rarement utilisé. Je suppose qu'il y a un meilleur moyen d'allouer des ressources. Ce serait plutôt bien si je pouvais utiliser la même évaluation_loop pour surveiller la progression de plusieurs modèles différents (points de contrôle dans plusieurs répertoires). Est quelque chose comme ça possible?

2) Il n'y a pas de retour d'information entre l'évaluation et la formation. Je m'entraîne une tonne de modèles et j'aimerais utiliser l'arrêt précoce pour arrêter les modèles qui n'apprennent pas ou ne convergent pas. Y a-t-il un moyen de faire cela? Idéalement, en utilisant des informations provenant de l'ensemble de validation, mais s'il doit être basé sur les données de formation qui vont aussi.

3) est mon flux de travail tout faux et je devrais être structurer différemment? Il n'est pas clair de la documentation sur la manière d'utiliser une évaluation conjointement avec la formation.

mise à jour ~~ Il semble que, comme de TF R0.11, je reçois aussi un segfault lors de l'appelant slim.évaluation.valuation_loop . Cela ne se produit que parfois (pour moi quand j'envoie mes emplois à un cluster). Il arrive dans sv.managed_session - spécifiquement préparer_or_wait_for_session . ~~ Ceci était juste dû à la boucle d'évaluation (une seconde instance de Tensorflow) tente d'utiliser le GPU, déjà réquisitionné par la première instance.


1 commentaires

Avez-vous résolu la question de la rétroaction entre évaluation et formation? Si oui, pourriez-vous élaborer comment?


3 Réponses :


6
votes
  1. évaluation_loop est destiné à être utilisé (comme vous l'utilisez actuellement) avec un seul répertoire. Si vous voulez être plus efficace, vous pouvez utiliser Slim.Evaluation.Evaluation.Encece et ajouter la logique appropriée pour échanger des annuaires comme vous trouvez appropriée.

  2. Vous pouvez le faire en prenant en charge l'argument Slim.Learning.Train (..., train_step_fn). Cet argument remplace la fonction 'Train_step' avec une fonction personnalisée. Ici, vous pouvez fournir une fonction de formation personnalisée qui renvoie les valeurs "total_loss" et "devoir_stop" comme vous le voyez.

  3. Votre flux de travail a l'air génial, c'est probablement le flux de travail le plus courant pour l'apprentissage / l'évaluation à l'aide de TF-SLIM.


0 commentaires

1
votes

Ajout de mes 2 cents:

J'ai actuellement ce modèle pour l'évaluation_loop Hogging up an GPU entier, mais il est rarement utilisé p> blockQuote>

Habituellement, un modèle d'évaluation prend moins de mémoire GPU. Vous pouvez empêcher TF de collecter la mémoire GPU entière en définissant la configuration de session allow_growth code> à vrai code>. De cette façon, vous pouvez utiliser le même GPU pour la formation et l'évaluation P>

Exemple @ Formation P>

session_config = tf.ConfigProto()
session_config.gpu_options.allow_growth = True

slim.evaluation.evaluation_loop(
      '',
      checkpoint_dir=train_log_dir,
      logdir=train_log_dir,
      num_evals=FLAGS.num_eval_batches,
      eval_op=names_to_updates.values(),
      summary_op=tf.merge_summary(summary_ops),
      eval_interval_secs=FLAGS.eval_interval_secs,
      session_config=session_config)


0 commentaires

6
votes

merci à @kmalakoff, Le problème Tensorflow a donné un moyen brillant au problème que Comment valider ou tester le modèle dans TF.SLIM Formation. L'idée principale consiste à remplacer train_step_fn fonction: xxx


2 commentaires

Comment exécutez-vous une validation de précision pour une époque entière? Je ne pouvais que le faire fonctionner pour 1 mini-lot.


@Michael Voulez-vous dire que le accuracy_validation dans le code calculille simplement la précision d'une mini-lot de données? Si oui, vous pouvez lire plus de détails dans le numéro source. Accuracy_Validation est en fait un OP que vous pouvez nourrir autant de données que vous le souhaitez, y compris toutes les données de validation.