online learning machine-learning tensorflow tensorboard

machine-learning - learning - tensorflow graph



TensorBoard: traza el entrenamiento y las pérdidas de validación en el mismo gráfico. (4)

¿Hay alguna manera de trazar las pérdidas de entrenamiento y 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 pone 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 empezado o no a divergir debido a un ajuste excesivo.

¿Hay alguna forma de hacerlo? Si no, ¿un trabajo alternativo? ¡Muchas gracias!


En lugar de mostrar las dos líneas por separado, puede trazar la diferencia entre la validación y las pérdidas de 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 múltiples resúmenes por ejecución).


Para completar, desde tensorboar 1.5.0 esto ahora es posible.

Puede usar el plugin scalars personalizado. Para esto, primero necesita hacer una configuración de diseño de tensorboard y escribirla en el archivo de evento. Del ejemplo del 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()

Una Category es un grupo de Chart . Cada Chart corresponde a un único diagrama que muestra varios escalares juntos. El Chart puede trazar escalas simples ( MultilineChartContent ) o áreas rellenas ( MarginChartContent , por ejemplo, cuando desea trazar la desviación de algún valor). El miembro de tag de MultilineChartContent debe ser una lista de expresiones regulares que coincidan con las tag de los escalares que desea agrupar en el gráfico. Para obtener más detalles, consulte las definiciones de 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 FileWriter escribiendo en el mismo directorio, necesita escribir el diseño en solo uno de los archivos. Escribirlo en un archivo separado también funciona.

Para ver los datos en TensorBoard, debe 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


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

Te recomiendo que desprotejas a Losswise ( https://losswise.com ) para trazar y mantener un registro de las funciones de pérdida como alternativa al Tensorboard. Con Losswise, especifica exactamente qué se debe graficar:

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 ve así:

Observe cómo se alimentan los datos a un gráfico particular explícitamente a través de la llamada loss_graph.append , loss_graph.append datos aparecen en el tablero 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 estadísticas de resumen en sus experimentos. Muy útil para comparar resultados en una gran cantidad de experimentos.


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