TensorBoard-Trazar las pérdidas de entrenamiento y validación en el mismo gráfico?


¿Hay una manera de trazar tanto las pérdidas de entrenamiento como las pérdidas de validación en el mismo gráfico?

Es fácil tener dos resúmenes escalares separados para cada uno de ellos individualmente, pero esto los coloca en gráficos separados. Si ambos se muestran en el mismo gráfico, es mucho más fácil ver la brecha entre ellos y si han comenzado a divergir debido al sobreajuste.

¿Hay una forma integrada de hacer esto? Si no, un trabajo alrededor de la manera? ¡Muchas gracias!

Author: Lifu Huang, 2016-05-10

4 answers

La solución que he estado haciendo es usar dos SummaryWriter con diferentes dir de registro para el conjunto de entrenamiento y el conjunto de validación cruzada, respectivamente. Y verás algo como esto:

introduzca la descripción de la imagen aquí

 15
Author: Lifu Huang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-07 23:45:07

En lugar de mostrar las dos líneas por separado, puede trazar la diferencia entre las pérdidas de validación y entrenamiento como su propio resumen escalar para rastrear la divergencia.

Esto no proporciona tanta información en un solo gráfico (en comparación con la adición de dos resúmenes), pero ayuda a poder comparar varias ejecuciones (y no agregar varios resúmenes por ejecución).

 8
Author: golmschenk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-11 14:06:55

Tensorboard es una herramienta muy agradable, pero por su naturaleza declarativa puede dificultar que haga exactamente lo que desea.

Te recomiendo que compruebes Losswise ( https://losswise.com ) para trazar y realizar un seguimiento de las funciones de pérdida como una alternativa a Tensorboard. Con Losswise se especifica exactamente lo que se debe graficar juntos:

import losswise

losswise.set_api_key("project api key")
session = losswise.Session(tag='my_special_lstm', max_iter=10)
loss_graph = session.graph('loss', kind='min')

# train an iteration of your model...
loss_graph.append(x, {'train_loss': train_loss, 'validation_loss': validation_loss})
# keep training model...

session.done()

Y luego obtienes algo que se parece a:

Pérdida de entrenamiento y prueba en el mismo gráfico

Observe cómo se alimentan los datos a un gráfico particular explícitamente a través de la llamada loss_graph.append, cuyos datos aparecen en el panel de control de su proyecto.

Además, para el ejemplo anterior Losswise generaría automáticamente una tabla con columnas para min(training_loss) y min(validation_loss) para que pueda comparar fácilmente las estadísticas de resumen a través de sus experimentos. Muy útil para comparar resultados en un gran número de experimentos.

 1
Author: nicodjimenez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-29 04:18:13

Para completar, desde tensorboar 1.5.0 esto es ahora posible.

Puede usar el complemento escalar personalizado. Para esto, primero debe hacer la configuración del diseño de tensorboard y escribirlo en el archivo de eventos. Del ejemplo de tensorboard:

import tensorflow as tf
from tensorboard import summary
from tensorboard.plugins.custom_scalar import layout_pb2

# The layout has to be specified and written only once, not at every step

layout_summary = summary.custom_scalar_pb(layout_pb2.Layout(
  category=[
    layout_pb2.Category(
      title='losses',
      chart=[
          layout_pb2.Chart(
              title='losses',
              multiline=layout_pb2.MultilineChartContent(
                tag=[r'loss.*'],
              )),
          layout_pb2.Chart(
              title='baz',
              margin=layout_pb2.MarginChartContent(
                series=[
                  layout_pb2.MarginChartContent.Series(
                    value='loss/baz/scalar_summary',
                    lower='baz_lower/baz/scalar_summary',
                    upper='baz_upper/baz/scalar_summary'),
                ],
              )), 
      ]),
    layout_pb2.Category(
      title='trig functions',
      chart=[
          layout_pb2.Chart(
              title='wave trig functions',
              multiline=layout_pb2.MultilineChartContent(
                tag=[r'trigFunctions/cosine', r'trigFunctions/sine'],
              )),
          # The range of tangent is different. Let's give it its own chart.
          layout_pb2.Chart(
              title='tan',
              multiline=layout_pb2.MultilineChartContent(
                tag=[r'trigFunctions/tangent'],
              )),
      ],
      # This category we care less about. Let's make it initially closed.
      closed=True),
  ]))

writer = tf.summary.FileWriter(".")
writer.add_summary(layout_summary)
# ...
# Add any summary data you want to the file
# ...
writer.close()

Un Category es un grupo de Charts. Cada Chart corresponde a una única parcela que muestra varios escalares juntos. El Chart puede trazar escalares simples (MultilineChartContent) o áreas llenas (MarginChartContent, por ejemplo, cuando desea trazar la desviación de algunos valor). El miembro tag de MultilineChartContent debe ser una lista de expresiones regulares que coincidan con los tags de los escalares que desea agrupar en el Gráfico. Para más detalles consulte las definiciones proto de los objetos en https://github.com/tensorflow/tensorboard/blob/master/tensorboard/plugins/custom_scalar/layout.proto. Tenga en cuenta que si tiene varios FileWriterescribiendo en el mismo directorio, necesita escribir el diseño en solo uno de los archivos. Escribirlo en un archivo separado también funciona.

A ver los datos en TensorBoard, es necesario abrir la pestaña escalares personalizados. Aquí hay una imagen de ejemplo de qué esperar https://user-images.githubusercontent.com/4221553/32865784-840edf52-ca19-11e7-88bc-1806b1243e0d.png

 1
Author: niko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-16 14:36:14