Path: blob/master/site/es-419/tensorboard/dataframe_api.ipynb
25115 views
Copyright 2020 The TensorFlow Authors.
Acceso a los datos de TensorBoard como DataFrames
Descripción general
La principal característica de TensorBoard es su interfaz gráfica de usuario interactiva. Sin embargo, los usuarios a veces quieren programáticamente leer los registros de datos almacenados en TensorBoard, con fines tales como la realización de análisis post-hoc y la creación de visualizaciones personalizadas de los datos de registro.
TensorBoard 2.3 es compatible con este caso de uso con tensorboard.data.experimental.ExperimentFromDev()
. Permite el acceso programático a los registros escalares de TensorBoard. Esta página demuestra el uso básico de esta nueva API.
Nota:
Esta API se encuentra todavía en fase experimental, como refleja su espacio de nombres API. Esto significa que la API puede estar sujeta a cambios de última hora en el futuro.
Actualmente, esta característica sólo es compatible con logdirs subidos a TensorBoard.dev, un servicio gratuito alojado para persistir y compartir su TensorBoard. En el futuro se incorporará soporte para logdir de TensorBoard almacenados localmente. En pocas palabras, puede cargar un logdir TensorBoard en su sistema de archivos local a TensorBoard.dev con una sola línea de comando:
tensorboard dev upload --logdir <logdir>
. Consulte la documentación en tensorboard.dev para obtener más detalles.
Preparación
Para utilizar la API programática, asegúrese de instalar pandas
junto a tensorboard
.
Utilizaremos matplotlib
y seaborn
para gráficos personalizados en esta guía, pero puede elegir su herramienta preferida para analizar y visualizar DataFrame
.
Cargando escalares TensorBoard como un pandas.DataFrame
Una vez que un logdir de TensorBoard se ha cargado en TensorBoard.dev, se convierte en lo que denominamos un experimento. Cada experimento tiene un ID único, que se puede encontrar en la URL de TensorBoard.dev del experimento. Para nuestra demostración a continuación, utilizaremos un experimento de TensorBoard.dev en: https://tensorboard.dev/experiment/c1KCv3X3QvGwaXfgX1c4tg
df
es un pandas.DataFrame
que contiene todos los registros escalares del experimento.
Las columnas del DataFrame
son:
run
: cada ejecución corresponde a un subdirectorio del logdir original. En este experimento, cada ejecución procede de un entrenamiento completo de una red neuronal convolucional (CNN) en el conjunto de datos MNIST con un tipo de optimizador determinado (un hiperparámetro de entrenamiento). EsteDataFrame
contiene múltiples ejecuciones de este tipo, que corresponden a ejecuciones de entrenamiento repetidas con diferentes tipos de optimizadores.tag
: describe lo que significa elvalue
de la misma fila, es decir, qué métrica representa el valor en la fila. En este experimento, sólo tenemos dos etiquetas únicas:epoch_accuracy
yepoch_loss
para las métricas de precisión y pérdida respectivamente.step
: es un número que refleja el orden de serie de la fila correspondiente en su recorrido. Aquístep
se refiere en realidad al número de época. Si desea obtener las marcas de tiempo además de los valoresstep
, puede utilizar el argumento de palabra claveinclude_wall_time=True
al llamar aget_scalars()
.value
: Este es el valor numérico real de interés. Como se ha descrito anteriormente, cadavalue
en esteDataFrame
concreto es una pérdida o una precisión, dependiendo de latag
de la fila.
Obtener un DataFrame pivotado (de forma amplia)
En nuestro experimento, las dos etiquetas (epoch_loss
y epoch_accuracy
) están presentes en el mismo conjunto de pasos en cada ejecución. Esto nos permite obtener un DataFrame
de "forma ancha" directamente de get_scalars()
utilizando el argumento de la palabra clave pivot=True
. La forma amplia DataFrame
tiene todas sus etiquetas incluidas como columnas del DataFrame, lo que resulta más cómodo para trabajar en algunos casos, incluido el presente.
Sin embargo, tenga en cuenta que si no se cumple la condición de tener conjuntos uniformes de valores de paso en todas las etiquetas durante todas las ejecuciones, el uso de pivot=True
producirá un error.
Tenga en cuenta que en vez de una sola columna de "valor", el DataFrame de forma amplia incluye las dos etiquetas (métricas) como sus columnas de forma explícita: epoch_accuracy
y epoch_loss
.
Cómo guardar el DataFrame como CSV
pandas.DataFrame
tiene una buena interoperabilidad con CSV. Puede almacenarlo como un archivo CSV local y volver a cargarlo más tarde. Por ejemplo:
Efectuar análisis estadísticos y de visualización personalizados
Los gráficos anteriores muestran las curvas temporales de la precisión de validación y de la pérdida de validación. Cada curva muestra en promedio 5 ejecuciones bajo un tipo de optimizador. Gracias a una función incorporada de seaborn.lineplot()
, cada curva muestra también ±1 desviación estándar alrededor del promedio, lo que nos da una idea clara de la variabilidad de estas curvas y de la importancia de las diferencias entre los tres tipos de optimizadores. Esta visualización de la variabilidad aún no es compatible con la interfaz gráfica de usuario de TensorBoard.
Queremos estudiar la hipótesis de que la pérdida mínima de validación difiere significativamente entre los optimizadores "adam", "rmsprop" y "sgd". Así que vamos a extraer un DataFrame para la pérdida mínima de validación bajo cada uno de los optimizadores.
A continuación, realizamos un boxplot para visualizar la diferencia en las pérdidas mínimas de validación.
Por lo tanto, a un nivel de significancia de 0.05, nuestro análisis confirma nuestra hipótesis de que la pérdida mínima de validación es significativamente mayor (es decir, peor) en el optimizador rmsprop comparado con los otros dos optimizadores incluídos en nuestro experimento.
En resumen, este tutorial proporciona un ejemplo de cómo acceder a datos escalares como panda.DataFrame
de TensorBoard.dev. En él se demuestra el tipo de análisis y visualización flexibles y potentes que puede realizar con los DataFrame
.