Tengo algunos problemas para entender la nueva API tf.contrib.summary
. En el anterior, parecía que todo lo que se suponía que debía hacer era ejecutartf.summary.merge_all()
y ejecutarlo como una operación.
Pero ahora tenemos cosas como tf.contrib.summary.record_summaries_every_n_global_steps
, que se pueden usar así:
import tensorflow.contrib.summary as tfsum summary_writer = tfsum.create_file_writer(logdir, flush_millis=3000) summaries = [] # First we create one summary which runs every n global steps with summary_writer.as_default(), tfsum.record_summaries_every_n_global_steps(30): summaries.append(tfsum.scalar("train/loss", loss)) # And then one that runs every single time? with summary_writer.as_default(), tfsum.always_record_summaries(): summaries.append(tfsum.scalar("train/accuracy", accuracy)) # Then create an optimizer which uses a global step step = tf.create_global_step() train = tf.train.AdamOptimizer().minimize(loss, global_step=step)
Y ahora vienen algunas preguntas:
session.run(summaries)
en un bucle, supongo que el resumen de precisión se escribiría cada vez, mientras que el de pérdida no, porque solo se escribe si el paso global es divisible por 30.session.run([accuracy, summaries])
pero puedo ejecutar session.run(summaries)
ya que tienen una dependencia en el gráfico, ¿verdad?tf.contrib.summary.scalar
(y otros) aceptan un parámetro de step
?Al agregar una dependencia de control en 3) me refiero a hacer esto:
tf.control_dependencies(summaries): train = tf.train.AdamOptimizer().minimize(loss, global_step=step)
la respuesta se movió de editar a auto-respuesta según lo solicitado
Acabo de jugar un poco con esto, y parece que si uno combina tf.control_dependencies
con tf.record_summaries_every_n_global_steps
, se comporta como se esperaba y el resumen solo se registra cada enésimo paso. Pero si se ejecutan juntos dentro de una sesión, como session.run([train, summs])
, los resúmenes se almacenan de vez en cuando, pero no exactamente cada enésimo paso. Probé esto con n = 2 y con el segundo enfoque, el resumen a menudo se escribía en pasos impares, mientras que con el enfoque de dependencia de control siempre estaba en un paso par.