tutorial online guide example python tensorflow tensorboard

python - online - Entrenamiento de registro y pérdida de validación en tensor



tensorflow guide (2)

Hay varias maneras diferentes de lograr esto, pero está en el camino correcto al crear diferentes nodos tf.summary.scalar() . Como debe llamar explícitamente a SummaryWriter.add_summary() cada vez que desea registrar una cantidad en el archivo de eventos, el enfoque más simple es, probablemente, buscar el nodo de resumen apropiado cada vez que desee obtener la precisión de la capacitación o validación:

accuracy = tf.reduce_mean(correct) training_summary = tf.summary.scalar("training_accuracy", accuracy) validation_summary = tf.summary.scalar("validation_accuracy", accuracy) summary_writer = tf.summary.FileWriter(...) for step in xrange(NUM_STEPS): # Perform a training step.... if step % LOG_PERIOD == 0: # To log training accuracy. train_acc, train_summ = sess.run( [accuracy, training_summary], feed_dict={images : training_set.images, labels : training_set.labels}) writer.add_summary(train_summ, step) # To log validation accuracy. valid_acc, valid_summ = sess.run( [accuracy, validation_summary], feed_dict={images : validation_set.images, labels : validation_set.labels}) writer.add_summary(valid_summ, step)

Alternativamente, podría crear una tf.placeholder(tf.string, []) resumen única cuya etiqueta sea un tf.placeholder(tf.string, []) y alimentar la cadena "training_accuracy" o "validation_accuracy" según corresponda.

Estoy tratando de aprender a usar tensorflow y tensorboard. Tengo un proyecto de prueba basado en el tutorial de red neuronal MNIST .

En mi código, construyo un nodo que calcula la fracción de dígitos en un conjunto de datos que están clasificados correctamente, así:

correct = tf.nn.in_top_k(self._logits, labels, 1) correct = tf.to_float(correct) accuracy = tf.reduce_mean(correct)

Aquí, self._logits es la parte de inferencia del gráfico, y labels es un marcador de posición que contiene las etiquetas correctas.

Ahora, lo que me gustaría hacer es evaluar la precisión para el conjunto de entrenamiento y el conjunto de validación a medida que avanza la capacitación. Puedo hacer esto ejecutando el nodo de precisión dos veces, con diferentes 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})

Esto funciona según lo previsto. Puedo imprimir los valores, y puedo ver que inicialmente, las dos precisiones aumentarán, y eventualmente la precisión de validación se aplanará mientras la precisión del entrenamiento sigue aumentando.

Sin embargo, también me gustaría obtener gráficos de estos valores en tensorboard, y no puedo encontrar la manera de hacerlo. Si simplemente agrego un scalar_summary a la accuracy , los valores registrados no distinguirán entre el conjunto de entrenamiento y el conjunto de validación.

También intenté crear dos nodos de accuracy idénticos con diferentes nombres y ejecutando uno en el conjunto de entrenamiento y otro en el conjunto de validación. Luego agrego un scalar_summary a cada uno de estos nodos. Esto me da dos gráficos en tensorboard, pero en lugar de un gráfico que muestra la precisión del conjunto de entrenamiento y uno que muestra la precisión del conjunto de validación, ambos muestran valores idénticos que no coinciden con ninguno de los impresos en el terminal.

Probablemente no estoy entendiendo cómo resolver este problema. ¿Cuál es la forma recomendada de registrar por separado la salida de un solo nodo para diferentes entradas?


Otra forma de hacerlo es usar un segundo escritor de archivos. Entonces puede usar el comando merge_summaries.

train_writer = tf.summary.FileWriter(FLAGS.summaries_dir + ''/train'', sess.graph) test_writer = tf.summary.FileWriter(FLAGS.summaries_dir + ''/test'') tf.global_variables_initializer().run()

Aquí está la documentación completa. Esto funciona bien para mí: TensorBoard: Visualizing Learning