La journalisation de formation et de validation de la perte dans tensorboard
Je suis en train d'apprendre à utiliser tensorflow et tensorboard. J'ai un projet de test basé sur le MNIST neural net tutoriel.
Dans mon code, je construis un nœud qui calcule la fraction de chiffres dans un ensemble de données qui sont correctement classés, comme ceci:
correct = tf.nn.in_top_k(self._logits, labels, 1)
correct = tf.to_float(correct)
accuracy = tf.reduce_mean(correct)
Ici, self._logits
est l'inférence à la partie du graphe, et labels
est un espace réservé qui contient les étiquettes correctes.
Maintenant, ce que je voudrais faire est d'évaluer l'exactitude pour à la fois l'ensemble de la formation et de l'ensemble de validation que la formation produit. Je peux le faire en exécutant l'exactitude nœud à deux reprises, avec différents feed_dicts:
train_acc = tf.run(accuracy, feed_dict={images : training_set.images, labels : training_set.labels})
valid_acc = tf.run(accuracy, feed_dict={images : validation_set.images, labels : validation_set.labels})
Cela fonctionne comme prévu. Je peux imprimer les valeurs, et je vois qu'au départ, les deux la précision augmente, et, finalement, la validation de l'exactitude de la aplatir alors que la formation de la précision croissante.
Cependant, je tiens également à obtenir des graphiques de ces valeurs dans tensorboard, et je ne peux pas comprendre comment le faire. Si j'ajoute simplement un scalar_summary
à accuracy
, les valeurs enregistrés ne fera pas de distinction entre l'ensemble d'apprentissage et l'ensemble de validation.
J'ai aussi essayé de créer deux identiques accuracy
nœuds avec des noms différents et l'exécution de l'une sur l'ensemble de la formation et de l'un sur l'ensemble de validation. J'ajoute ensuite un scalar_summary
pour chacun de ces nœuds. Cela ne me donner deux graphiques de tensorboard, mais au lieu d'un graphique montrant le jeu de la formation de l'exactitude et de l'un montrant l'ensemble de validation de la précision, ils sont tous deux montrant des valeurs identiques qui ne correspondent à aucun de ceux imprimés sur le terminal.
Je suis probablement l'incompréhension comment résoudre ce problème. Quelle est la méthode recommandée séparément de la connexion la sortie d'un nœud unique pour les différentes entrées?
Vous devez vous connecter pour publier un commentaire.
Il existe plusieurs façons différentes que vous pourriez réaliser cela, mais vous êtes sur la bonne voie avec la création de différents
tf.résumé.scalaire()
nœuds. Puisque vous devez appeler explicitementSummaryWriter.add_summary()
chaque fois que vous voulez enregistrer une quantité de l'événement fichier, l'approche la plus simple est probablement d'aller chercher le résumé approprié nœud à chaque fois que vous voulez obtenir de la formation ou de la validation de la précision:Alternativement, vous pouvez créer un seul résumé op dont le tag est un
tf.espace réservé(tf.string, [])
et se nourrir de la chaîne"training_accuracy"
ou"validation_accuracy"
appropriées.merge_all_summaries
plutôt que de faire deadd_summary
pour chaque résumé. La documentation semble suggérer que l'utilisation demerge_all_summaries
est préféré par rapport à différents appels àadd_summary
, mais dans ce cas, la méthode manuelle semble mieux.merge_all_summaries
est un "one size fits all" façon de faire les choses, mais les appels àadd_summary
vous donne beaucoup plus de contrôle. (Pour ce que ça vaut, nous avons généralement mis en place des processus pour faire de la formation et de validation, où la tâche de validation a son propre légèrement différente - graphique et de charges dans le dernier modèle de point de contrôle périodiquement.)merge_all_summaries()
?Une autre façon de le faire est d'utiliser un deuxième fichier de l'écrivain. Donc, vous êtes en mesure d'utiliser le merge_summaries commande.
Voici la documentation complète. Cela fonctionne pour moi amende : TensorBoard: Visualisation De L'Apprentissage
test_writer
?