Comment Surveiller les Sessions de Formation de travail?
J'essaie de comprendre la différence entre l'utilisation de tf.Session
et tf.train.MonitoredTrainingSession
, et où je pourrais préférer l'une sur l'autre. Il semble que lorsque j'utilise le dernier, je ne peux éviter de nombreuses tâches domestiques telles que l'initialisation des variables, à partir de la file d'attente des coureurs, ou la mise en place du fichier des écrivains pour les opérations de résumé. D'autre part, avec la surveillance de la session de formation, je ne peux pas spécifier le graphe que je veux utiliser explicitement. Tout cela semble assez mystérieux pour moi. Est-il une philosophie sous-jacente à la façon dont ces classes ont été créées que je ne suis pas la compréhension?
- Je pense que la réponse de Nicolas devrait couvrir à peu près vous - pas ?
Vous devez vous connecter pour publier un commentaire.
Je ne peux pas donner quelques idées sur la façon de ces classes ont été créées, mais voici quelques choses que je pense sont relevants sur comment vous pourriez les utiliser.
La
tf.Session
est un faible niveau d'objet en python TensorFlow API tandis que,comme vous l'avez dit, le
tf.train.MonitoredTrainingSession
livré avec un lot de fonctionnalités à portée de main, particulièrement utile dans la plupart des cas.Avant de décrire certains des avantages de la
tf.train.MonitoredTrainingSession
, permettez-moi de répondre à la question sur le graphique utilisé par la session. Vous pouvez spécifier letf.Graph
utilisé par leMonitoredTrainingSession
à l'aide d'un gestionnaire de contextewith your_graph.as_default()
:Donc, comme vous l'avez dit, les avantages de l'utilisation de
MonitoredTrainingSession
sont que, cet objet prend soin demais il a aussi l'avantage de rendre votre code facile à distribuer, car il fonctionne différemment selon si vous avez spécifié le processus en cours d'exécution comme un maître ou non.
Par exemple, vous pouvez exécuter quelque chose comme:
que vous appelez dans une non distribués de la manière:
ou d'une manière distribuée (voir la distribué doc pour plus d'informations sur les entrées):
D'autre part, les avantages de l'utilisation du raw
tf.Session
objet, c'est que, vous n'avez pas les avantages detf.train.MonitoredTrainingSession
, ce qui peut être utile si vous ne prévoyez pas de l'utiliser ou si vous souhaitez obtenir plus de contrôle (par exemple sur la façon dont les files d'attente sont démarrés).MODIFIER (par commentaire):
Pour l'op de l'initialisation, vous devez faire quelque chose comme (cf. officiel doc:
Pour la QueueRunner, je vous invite à consulter le officiel doc où vous trouverez plus d'exemples complets.
EDIT2:
Le concept principal de comprendre pour avoir une idée sur la façon
tf.train.MonitoredTrainingSession
œuvres est la_WrappedSession
classe:La
tf.train.MonitoredTrainingSession
des travaux (comme de la version 1.1) de cette façon:StopAtStepHook
voudrais juste récupérer leglobal_step
tenseur à ce stade.Chief
(ouWorker
session) enveloppé dans un_HookedSession
enveloppé dans un_CoordinatedSession
enveloppé dans un_RecoverableSession
.Le
Chief
/Worker
séances sont chargés de l'exécution de l'initialisation de la fpo fournis par leScaffold
.chief
session prend également soin de tous les point de contrôle de pièces: par exemple, la restauration à partir de points de contrôle à l'aide de laSaver
de laScaffold
._HookedSession
est essentiellement là pour décorer larun
méthode: il appelle la_call_hook_before_run
etafter_run
méthodes, le cas échéant._CoordinatedSession
construit uneCoordinator
qui commence la file d'attente des coureurs et sera responsable de leur fermeture._RecoverableSession
sera assure qu'il n'y a réessayer en cas detf.errors.AbortedError
.En conclusion, la
tf.train.MonitoredTrainingSession
évite beaucoup de chaudière plaque de code tout en étant facilement extensible avec les crochets mécanisme.tf.initialize_all_variables()
est obsolète btw, ils deviennent obsolètes très rapidement. Ce que j'ai été intéressé est l' "sous le capot actions" - il faut aller dans le code comme dans github.com/tensorflow/tensorflow/blob/... - ici le graphe (graphique...) est finalisé par exemple. Donc, MTS fait beaucoup - et comme nous l'avons mentionné dans ma question précédente, cela peut conduire à de mauvaises surprises. Il serait intéressant d'avoir un aperçu de la série les opérations sont effectuées - ne peut pas upvote plus cependanttf.global_variables_initializer()
. Merci d'avoir repéré).as of version 1.1
un lien vers le code ? Appuyez sur y pendant l'affichage du code sur github et il sera transformé en un lien à la commettre (très important sinon les liens de pause)