Path: blob/master/site/es-419/tensorboard/scalars_and_keras.ipynb
25115 views
Copyright 2019 The TensorFlow Authors.
Escalares de TensorBoard: Registro de métricas de entrenamiento en Keras
Descripción general
El aprendizaje automático implica invariablemente comprender métricas clave como la pérdida y cómo cambian conforme avanza el entrenamiento. Estas métricas pueden ayudarle a entender si está sobreajustando, por ejemplo, o si está entrenando innecesariamente durante demasiado tiempo. Es posible que desee comparar estas métricas entre diferentes ejecuciones de entrenamiento para ayudar a depurar y mejorar su modelo.
El Panel de series temporales de TensorBoard le permite visualizar estas métricas utilizando una API sencilla con muy poco esfuerzo. Este tutorial presenta ejemplos muy básicos para ayudarle a aprender a utilizar estas API con TensorBoard cuando desarrolle su modelo en Keras. Aprenderá a utilizar la retrollamada de TensorBoard para Keras y las API de resumen de TensorFlow para visualizar escalares predeterminados y personalizados.
Preparación
Preparar los datos para una regresión simple
Ahora va a utilizar Keras para calcular una regresión, es decir, encontrar la mejor línea de ajuste para un conjunto de datos emparejados. (Aunque utilizar redes neuronales y el descenso de gradiente es excesivo para este tipo de problema, resulta un ejemplo muy fácil de comprender).
Usted va a utilizar TensorBoard para observar cómo el entrenamiento y la prueba pérdida cambian a través de las épocas. Con suerte, verá que las pérdidas en el entrenamiento y en la prueba disminuyen con el tiempo y después permanecen estables.
En primer lugar, genere 1000 puntos de datos aproximadamente a lo largo de la línea y = 0,5x + 2. Divida estos puntos de datos en conjuntos de entrenamiento y de prueba. Su esperanza es que la red neuronal aprenda esta relación.
Entrenamiento del modelo y registro de las pérdidas
Ya está listo para definir, entrenar y evaluar su modelo.
Para registrar la pérdida escalar mientras entrena, hará lo siguiente:
Crear la retrollamada de TensorBoard para Keras
Especifique un directorio de registro
Pase la retrollamada de TensorBoard a Model.fit() de Keras.
TensorBoard lee los datos de registro de la jerarquía de directorios de registro. En este bloc de notas, el directorio raíz de registro es logs/scalars
, al que se le añade un subdirectorio con marca de tiempo. El subdirectorio con marca de tiempo le permite identificar y seleccionar fácilmente las ejecuciones de entrenamiento conforme utiliza TensorBoard e itera sobre su modelo.
Examinar la pérdida mediante TensorBoard
Ahora, inicie TensorBoard, y especifique el directorio raíz de registro que utilizó anteriormente.
Espere unos segundos a que la interfaz de usuario de TensorBoard se ponga en marcha.
Es posible que vea que TensorBoard muestra el mensaje "No hay cuadros de mando activos para el conjunto de datos actual". Esto se debe a que los datos de registro iniciales aún no se han guardado. Conforme avance el entrenamiento, el modelo de Keras empezará a registrar datos. TensorBoard se actualizará periódicamente y le mostrará sus métricas escalares. Si está impaciente, puede tocar la flecha Actualizar situada en la parte superior derecha.
A medida que observa el progreso del entrenamiento, observe cómo tanto la pérdida de entrenamiento como la de validación disminuyen rápidamente y después permanecen estables. De hecho, podría haber dejado de entrenar después de 25 épocas, porque el entrenamiento no mejoró mucho después de ese punto.
Pase el ratón por encima del gráfico para ver puntos de datos específicos. También puede intentar ampliarlos con el ratón o seleccionar parte de ellos para ver más detalles.
Observe el selector "Corridas" situado a la izquierda. Una "corrida" representa un conjunto de registros de una ronda de entrenamiento, en este caso el resultado de Model.fit(). Los desarrolladores normalmente tienen muchas, muchas corridas, ya que experimentan y desarrollan su modelo a lo largo del tiempo.
Utilice el selector de ejecuciones para elegir ejecuciones específicas, o elija entre sólo entrenamiento o validación. Comparar las ejecuciones le ayudará a evaluar qué versión de su código está resolviendo mejor su problema.
Bien, el gráfico de pérdidas de TensorBoard demuestra que la pérdida disminuyó consistentemente tanto para el entrenamiento como para la validación y después se estabilizó. ¡Eso significa que las métricas del modelo son probablemente muy buenas! Ahora veamos cómo se comporta realmente el modelo en la vida real.
Con los datos de entrada (60, 25, 2), la recta y = 0,5x + 2 debería dar (32, 14,5, 3). ¿Está de acuerdo el modelo?
¡No está nada mal!
Registro de escalares personalizados
¿Y si desea registrar valores personalizados, como una tasa de aprendizaje dinámico? Para ello, debe utilizar la API de resumen de TensorFlow.
Vuelva a entrenar el modelo de regresión y registre una tasa de aprendizaje personalizada. A continuación le explicamos como hacerlo:
Cree un escritor de archivos, utilizando
tf.summary.create_file_writer()
.Defina una función de tasa de aprendizaje personalizada. Esto se pasará a la retrollamada de Keras LearningRateScheduler.
Dentro de la función de la tasa de aprendizaje, utilice
tf.summary.scalar()
para registrar la tasa de aprendizaje personalizada.Pase la retrollamada de LearningRateScheduler a Model.fit().
En general, para registrar un escalar personalizado, necesita utilizar tf.summary.scalar()
con un escritor de archivos. El escritor de archivos es responsable de escribir los datos de esta ejecución en el directorio especificado y se utiliza implícitamente cuando se recurre al tf.summary.scalar()
.
Echemos un vistazo de nuevo a TensorBoard.
Utilizando el selector "Corridas" de la izquierda, observe que tiene una corrida <timestamp>/metrics
. Al seleccionar esta ejecución aparece un gráfico de "tasa de aprendizaje" que le permite verificar la progresión de la tasa de aprendizaje durante esta ejecución.
También puede comparar las curvas de pérdidas de entrenamiento y validación de esta ejecución con sus ejecuciones anteriores. También puede notar que la programación de la tasa de aprendizaje devolvió valores discretos, dependiendo de la época, pero el gráfico de la tasa de aprendizaje puede parecer liso. TensorBoard tiene un parámetro de alisamiento que quizás tenga que bajar a cero para ver los valores no alisados.
¿Cómo funciona este modelo?
Registro a nivel de lote
Primero carguemos el conjunto de datos MNIST, normalicemos los datos y escribamos una función que cree un modelo sencillo de Keras para clasificar las imágenes en 10 clases.
Registro instantáneo a nivel de lote
El registro instantáneo de las métricas a nivel de lote puede mostrarnos el nivel de fluctuación entre lotes durante el entrenamiento en cada época, lo que puede ser útil para la depuración.
Configuración de un escritor de resúmenes en un directorio de registro diferente:
Para habilitar el registro por lotes, se deben definir métricas tf.summary
personalizadas anulando train_step()
en la definición de clase del Modelo y encerrarlas en un contexto de escritor de resúmenes. Esto puede hacerse simplemente combinando en definiciones de Modelo subclase o puede extenderse para editar nuestro anterior Modelo API Funcional, como se muestra a continuación:
Defina nuestra retrollamada TensorBoard para registrar tanto las métricas a nivel de época como a nivel de lote en nuestro directorio de registro y llame a model.fit()
con nuestro batch_size
seleccionado:
Abra TensorBoard con el nuevo directorio de registro y vea tanto las métricas a nivel de época como a nivel de lote:
Registro acumulativo a nivel de lote
El registro a nivel de lote también puede implementarse de forma acumulativa, promediando las métricas de cada lote con las de los lotes anteriores y dando como resultado una curva de entrenamiento más suave al registrar las métricas a nivel de lote.
Configuración de un escritor de resúmenes en un directorio de registro diferente:
Cree métricas de estado que puedan registrarse por lote:
Como en el caso anterior, incorpore las métricas personalizadas tf.summary
en el método anulado train_step
. Para que el registro a nivel de lote sea acumulativo, utilice las métricas de estado que definimos para calcular el resultado acumulativo teniendo en cuenta los datos de cada paso del entrenamiento.
Como ya hicimos antes, definimos nuestra retrollamada de TensorBoard y llamamos a model.fit()
con nuestro batch_size
seleccionado:
Abra TensorBoard con el nuevo directorio de registro y vea tanto las métricas a nivel de época como a nivel de lote:
Eso es todo. Ahora ya sabe cómo crear métricas de entrenamiento personalizadas en TensorBoard para una amplia variedad de casos de uso.