No se puede usar summary.merge en tensorboard para resúmenes de capacitación y evaluación separados

Estoy tratando de usar tensorboard para observar el aprendizaje de una neural network convolucional. Lo estoy haciendo bien con la función tf.summary.merge_all para crear un resumen combinado. Sin embargo, me gustaría tener un seguimiento de la precisión y la pérdida, tanto para la capacitación como para los datos de prueba. Esta publicación es útil: registro de pérdida de entrenamiento y validación en tensorboard .

Para hacer las cosas más fáciles de manejar, me gustaría unir mis resúmenes en dos resúmenes combinados, uno para entrenamiento y otro para validación (agregaré más material eventualmente, como pesos de imágenes, etc.) Traté de seguir la descripción de tensorboard tf .summary.merge . No puedo hacer que funcione y no puedo encontrar ningún ejemplo práctico que me ayude a entender en qué me estoy equivocando.

with tf.name_scope('accuracy'): correct_prediction = tf.equal(tf.argmax(y_logits, 1), tf.argmax(y, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, 'float')) tf.summary.scalar('accuracy', accuracy) tf.summary.scalar('train_accuracy', accuracy) with tf.name_scope('Cost'): cross_entropy = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(logits=y_logits, labels=y)) opt = tf.train.AdamOptimizer() optimizer = opt.minimize(cross_entropy) grads = opt.compute_gradients(cross_entropy, [b_fc_loc2]) tf.summary.scalar('cost', cross_entropy) tf.summary.scalar('train_cost', cross_entropy) with tf.Session() as sess: writer = tf.summary.FileWriter('./logs/mnistlogs/1f', sess.graph) sess.run(tf.global_variables_initializer()) merged = tf.summary.merge([cost, accuracy]) 

Esto resulta en el siguiente error:

InvalidArgumentError (ver más arriba para el rastreo): No se pudo analizar una de las entradas de resumen [[Nodo: Fusionar / Fusionar / MergeSummary = MergeSummary [N = 2, _device = “/ job: localhost / réplica: 0 / cpu: 0” ] (Merge / MergeSummary / inputs_0, Merge / MergeSummary / inputs_1)]]

Me gustaría saber por qué esto no funciona, y cómo puedo encontrar una solución, se agradece cualquier ejemplo de trabajo.

Me lo imaginé. Necesito dar los nombres de los resúmenes antes de fusionarme. El siguiente código resuelve el problema:

 with tf.name_scope('Cost'): cross_entropy = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(logits=y_logits, labels=y)) opt = tf.train.AdamOptimizer(learning_rate=0.000003) optimizer = opt.minimize(cross_entropy) grads = opt.compute_gradients(cross_entropy, [b_fc_loc2]) cost_sum = tf.summary.scalar('val_cost', cross_entropy) training_cost_sum = tf.summary.scalar('train_cost', cross_entropy) with tf.name_scope('accuracy'): correct_prediction = tf.equal(tf.argmax(y_logits, 1), tf.argmax(y, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, 'float')) train_accuracy = accuracy accuracy_sum = tf.summary.scalar('val_accuracy', accuracy) training_accuracy_sum = tf.summary.scalar('train_accuracy', accuracy) with tf.Session() as sess: writer = tf.summary.FileWriter('./logs/{}/{}'.format(session_name, run_num), sess.graph) sess.run(tf.global_variables_initializer()) train_merged = tf.summary.merge([training_accuracy_sum, training_cost_sum])