Puntos de control
Create machine learning models
/ 15
Use the model
/ 15
Save and Load Models
/ 15
Explore Callbacks
/ 15
Exercise 1
/ 15
Exercise 2
/ 15
Exercise 3
/ 10
Introducción a la visión artificial con TensorFlow
- GSP631
- Descripción general
- Objetivos
- Configuración y requisitos
- Tarea 1. Abre el notebook en Vertex AI Workbench
- Tarea 2. Crea un notebook nuevo y, luego, importa bibliotecas
- Tarea 3. Carga y procesa el conjunto de datos previamente
- Tarea 4. Diseña, compila y entrena el modelo
- Tarea 5. Evalúa el rendimiento del modelo en datos no vistos
- Tarea 6. Guarda y carga el modelo
- Tarea 7. Explora las devoluciones de llamada
- Tarea 8. Experimenta con el modelo
- ¡Felicitaciones!
GSP631
Descripción general
TensorFlow es una biblioteca de aprendizaje automático (AA) potente, portátil y de código abierto. Fue desarrollada por Google y puede trabajar con conjuntos de datos de gran tamaño. En este lab, crearás y entrenarás un modelo de visión artificial para reconocer diferentes prendas de vestir usando Vertex AI Workbench de TensorFlow.
Introducción a TensorFlow
TensorFlow ofrece un marco de trabajo computacional para crear modelos de AA. Ofrece una variedad de kits de herramientas diferentes que te permiten crear modelos con el nivel de abstracción que prefieras. En este lab, usarás tf.keras, una API de alto nivel para crear y entrenar una red neuronal para clasificar imágenes en TensorFlow.
Redes neuronales
Una red neuronal es un modelo inspirado en el cerebro. Se compone de capas, de las cuales al menos una está oculta, que consiste en unidades o neuronas simples conectadas seguidas de no linealidades.
Un nodo de una red neuronal generalmente recibe varios valores de entrada y genera un solo valor de salida. La neurona aplica una función de activación (transformación no lineal) a una suma ponderada de valores de entrada para calcular el valor de salida.
Para obtener más información sobre las redes neuronales, consulta Redes neuronales: estructura.
Objetivos
En este lab, aprenderás a hacer lo siguiente:
- Diseñar, compilar, entrenar y evaluar un modelo de TensorFlow
- Guardar y cargar modelos
- Escribir tus propias devoluciones de llamada para personalizar el comportamiento durante el entrenamiento
- Completar una serie de ejercicios para guiarte por la experimentación con las diferentes capas de la red
Configuración y requisitos
Antes de hacer clic en el botón Comenzar lab
Lee estas instrucciones. Los labs son cronometrados y no se pueden pausar. El cronómetro, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.
Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.
Para completar este lab, necesitarás lo siguiente:
- Acceso a un navegador de Internet estándar (se recomienda el navegador Chrome)
- Tiempo para completar el lab: Recuerda que, una vez que comienzas un lab, no puedes pausarlo.
Tarea 1. Abre el notebook en Vertex AI Workbench
-
En el menú de navegación de la consola de Google Cloud, haz clic en Vertex AI > Workbench.
-
Busca la instancia
y haz clic en el botón Abrir JupyterLab.
La interfaz de JupyterLab para tu instancia de Workbench se abrirá en una pestaña nueva del navegador.
Instala TensorFlow y paquetes adicionales
-
En el menú Selector, en Otro, selecciona Terminal.
-
Comprueba si tu entorno de Python ya está configurado. Copia y pega el siguiente comando en la terminal.
Resultado de ejemplo:
- Ejecuta el siguiente comando para instalar el paquete de TensorFlow.
- Para actualizar
pip3
, ejecuta el siguiente comando en la terminal.
Pylint es una herramienta que verifica si hay errores en el código de Python y destaca problemas sintácticos y estilísticos en tu código fuente de ese lenguaje.
- Ejecuta el siguiente comando para instalar el paquete de
pylint
.
- Instala los paquetes requeridos para el lab en el archivo
requirements.txt
:
Ahora, tu entorno está configurado.
Tarea 2. Crea un notebook nuevo y, luego, importa bibliotecas
-
Haz clic en el ícono del signo + a la izquierda de Workbench para abrir un nuevo Selector.
-
En el menú Selector, en Notebook, selecciona Python3.
Se te presentará un nuevo notebook de Jupyter. Para obtener más información sobre cómo usar notebooks de Jupyter, consulta la documentación de notebooks de Jupyter.
- Importa y configura
logging
ygoogle-cloud-logging
para Cloud Logging. En la primera celda, agrega el siguiente código:
- Importa
tensorflow
para entrenar y evaluar el modelo. Llámalotf
para facilitar su uso. Agrega el siguiente código a la primera celda.
- Importa
numpy
, para analizar los datos para depuración. Llámalonp
para facilitar su uso. Agrega el siguiente código a la primera celda.
- Agrega el siguiente código a la primera celda para importar
tensorflow_datasets
para integrar el conjunto de datos. TensorFlow Datasets es una colección de conjuntos de datos listos para usar con TensorFlow.
-
Para ejecutar la celda, haz clic en el botón Ejecutar o presiona Mayúsculas + Intro.
-
Guarda el notebook. Haz clic en Archivo -> Guardar. Asígnale al archivo el nombre
model.ipynb
y haz clic en Aceptar.
Tarea 3. Carga y procesa el conjunto de datos previamente
Acerca del conjunto de datos
Entrenarás una red neuronal para clasificar imágenes de indumentaria de un conjunto de datos llamado Fashion MNIST.
Este conjunto de datos tiene 70,000 prendas de indumentaria que pertenecen a 10 categorías diferentes de indumentaria. Las imágenes muestran artículos individuales de indumentaria en baja resolución (28 por 28 píxeles), como se observa aquí:
En este lab, se usarán 60,000 imágenes para entrenar la red y 10,000 para evaluar con qué precisión la red aprendió a clasificar las imágenes.
Los datos de Fashion MNIST están disponibles en tensorflow datasets(tfds).
Cómo cargar el conjunto de datos
Para cargar los datos de Fashion MNIST, deberás usar la función tfds.load()
.
- Agrega el siguiente código a la segunda celda en el notebook:
En el código anterior, configuraste el argumento split
para especificar qué divisiones del conjunto de datos se cargarán. Estableciste as_supervised
en True
para garantizar que el tf.data.Dataset
cargado tenga una estructura de 2 tuplas (input, label)
.
ds_train y ds_test son del tipo tf.data.Dataset
. ds_train tiene 60,000 imágenes que se usarán para entrenar el modelo. ds_test tiene 10,000 imágenes que se usarán para evaluarlo.
tfds.load()
y sus argumentos, consulta la guía.¿Qué aspecto tienen estos valores?
- A continuación, agrega sentencias de impresión para ver los valores mínimos y máximos de las imágenes de entrenamiento para el elemento 0. Agrega el siguiente código a la segunda celda:
Procesamiento previo de los datos
-
Tamaño del lote es un término que se usa en el aprendizaje automático y se refiere a la cantidad de ejemplos de entrenamiento utilizados en una iteración. Establecerás este término en un valor de
32
.
Especifica el tamaño del lote agregando el siguiente código model.ipynb
:
- Cuando se entrena una red neuronal, por varias razones es más sencillo si escalas los valores de píxeles al rango entre 0 y 1. Este proceso se conoce como 'normalización'. Puesto que los valores de píxeles para el conjunto de datos FashionMNIST están en el rango de [0, 255], dividirás los valores de píxeles por 255.0 para normalizar las imágenes.
El código que se ofrece a continuación usa la función map()
de tf.data.Dataset
para aplicar la normalización a imágenes en ds_train
y ds_test
. Como los valores de píxeles son del tipo tf.uint8
, la función tf.cast
se usa para convertirlos en tf.float32
y, luego, dividirlos por 255.0
. El conjunto de datos también se convierte en lotes llamando al método batch()
con BATCH_SIZE
como argumento.
tf.data.Dataset
aquí.Agrega el siguiente código al final del archivo:
- Vuelve a imprimir los valores mínimo y máximo de una imagen en el conjunto de datos de entrenamiento:
Agrega el siguiente código al final del archivo:
Tarea 4. Diseña, compila y entrena el modelo
En esta sección, diseñarás tu modelo usando TensorFlow.
- Agrega el siguiente código al archivo:
Mira los diferentes tipos de capas y los parámetros usados en la arquitectura del modelo:
-
Sequential: Define una SECUENCIA de capas en una red neuronal.
-
Flatten: Nuestras imágenes son de forma (28, 28), es decir, los valores están en forma de matriz cuadrada. Flatten toma ese cuadrado y lo convierte en un vector de una dimensión.
-
Dense: Agrega una capa de neuronas.
Cada capa de neuronas requiere una función de activación para decidir si una neurona debe activarse o no. Hay muchas opciones, pero este lab usa las siguientes.
-
Relu
significa, en la práctica, que X>0 devuelve X, si no, devuelve 0. Esta opción pasa valores 0 o superiores a la siguiente capa en la red. -
Softmax
toma un conjunto de valores y efectivamente selecciona el más grande para que no tengas que ordenarlos a fin de encontrar el mayor valor. Por ejemplo, si el resultado de la última capa se ve así [0.1, 0.1, 0.05, 0.1, 9.5, 0.1, 0.05, 0.05, 0.05], esta devuelve [0,0,0,0,1,0,0,0,0].
Compila y entrena el modelo
En esta sección, primero compilarás tu modelo con un optimizador y una función de pérdida. Luego, entrenarás el modelo con tus datos y etiquetas de entrenamiento.
El objetivo es que el modelo determine la relación entre los datos de entrenamiento y sus etiquetas. Una vez que se completa el entrenamiento, se recomienda que tu modelo vea imágenes nuevas de indumentaria que se parezca a tus datos de entrenamiento y haga predicciones sobre a qué clase de indumentaria pertenecen.
Un optimizador es uno de los dos argumentos requeridos para compilar un modelo tf.keras. Un Optimizer
es un algoritmo que modifica los atributos de la red neuronal, como las ponderaciones y la tasa de aprendizaje. Esto ayuda a reducir la pérdida y a mejorar la exactitud.
tf.keras
aquí.Loss
indica el rendimiento del modelo con un número. Si el modelo tiene un mejor rendimiento, la pérdida será un número pequeño. De lo contrario, será uno grande.
tf.keras
aquí.Observa el parámetro metrics=
. Esto le permite a TensorFlow informar sobre la exactitud del entrenamiento después de cada ciclo de entrenamiento comparando los resultados predichos con las respuestas conocidas (etiquetas). Básicamente, vuelve a informar sobre qué tan eficazmente progresa el entrenamiento.
Model.fit entrenará el modelo durante una cantidad fija de ciclos de entrenamiento.
- Agrega el siguiente código al archivo:
Haz clic en Revisar mi progreso para verificar el objetivo.
Ejecuta el código
- Para ejecutar la segunda celda, haz clic en el botón Ejecutar o presiona Mayúsculas + Intro.
Cuando la celda del notebook se ejecute, verás la información sobre la pérdida y la exactitud después de cada ciclo (o pase) de entrenamiento. Observa que con cada ciclo de entrenamiento (o pase), la exactitud sube:
Resultado de ejemplo (tus valores pueden ser un poco diferentes, así que ignora cualquier mensaje de advertencia):
Para el resultado # Values before normalization
, observarás que los valores mínimo y máximo están en el rango de[0, 255]
. Después de la normalización, puedes ver que todos los valores están en el rango de [0, 1]
.
A medida que avanza el entrenamiento, la pérdida disminuye y la exactitud aumenta.
Cuando el modelo ya termine de entrenarse, verás un valor de exactitud al final del último ciclo de entrenamiento. Podría estar cerca de 0.8864 como se ve arriba (tu exactitud puede ser distinta).
Esto te indica que la red neuronal tiene una precisión de aproximadamente un 89% en la clasificación de datos de entrenamiento. En otras palabras, determinó una coincidencia de patrones entre la imagen y las etiquetas que funcionó un 89% del tiempo. No es excelente, pero tampoco es deficiente si consideramos que solo se entrenó durante cinco ciclos en una red neuronal pequeña.
Tarea 5. Evalúa el rendimiento del modelo en datos no vistos
Pero ¿cómo tendrá rendimiento el modelo en los datos que no vio?
El conjunto de prueba puede ayudar a responder esta pregunta. Llama a model.evaluate
, pasa los dos conjuntos y este informa la pérdida de cada uno.
Evalúa el conjunto de prueba:
- Agrega el siguiente código a la tercera celda en el notebook:
- Para ejecutar la celda, haz clic en el botón Ejecutar o presiona Mayúsculas + Intro.
Si te desplazas hasta el final, podrás ver el resultado de la evaluación en la última línea.
El modelo informa una precisión de 0.8708 en el conjunto de prueba(ds_test
), lo que significa que su exactitud fue de cerca de un 87% (tus valores pueden ser un poco diferentes).
Como se esperaba, el modelo no es tan preciso con los datos desconocidos como lo fue con los que se entrenó.
A medida que ahondes en TensorFlow, aprenderás sobre maneras de mejorar esto.
Haz clic en Revisar mi progreso para verificar el objetivo.
Tarea 6. Guarda y carga el modelo
El avance del modelo se puede guardar durante el entrenamiento y después de este. Esto significa que un modelo puede reanudarse desde el punto en el que quedó y evitar largos momentos de entrenamiento. Si guardas el modelo también podrás compartirlo y otras personas podrán recrear tu trabajo. Para este primer ejercicio, agregarás el código necesario para guardar y cargar tu modelo.
SavedModel
y Keras
). El formato TensorFlow SavedModel
es el formato de archivo predeterminado en TF2.x. Sin embargo, los modelos se pueden guardar en el formato Keras
. Obtendrás más información para guardar modelos en los dos formatos de archivo.- Agrega el siguiente código a la cuarta celda en el notebook:
En el código anterior, se muestra cómo guardar el modelo en dos formatos diferentes y volver a cargar el modelo guardado. Puedes elegir cualquier formato según tu caso de uso. Puedes leer más respecto de esta función en la Documentación de TensorFlow de "Guarda y carga modelos".
- Para ejecutar la celda, haz clic en el botón Ejecutar o presiona Mayúsculas + Intro.
Al final del resultado, verás dos conjuntos de resúmenes de modelo. En el primero, se muestra el resumen después de que se guarda el modelo en el formato SavedModel
. En el segundo, se muestra el resumen después de que el modelo se guarda en el formato h5
.
Puedes ver que ambos resúmenes de modelo son idénticos, ya que, en efecto, guardamos el mismo modelo en dos formatos diferentes.
Haz clic en Revisar mi progreso para verificar el objetivo.
Tarea 7. Explora las devoluciones de llamada
Anteriormente cuando entrenaste el modelo, habrás notado que, a medida que avanzaba el entrenamiento, la pérdida del modelo disminuía y la exactitud aumentaba. Una vez que lograste la exactitud y pérdida del entrenamiento deseadas, puede que de todas formas hayas tenido que esperar un poco antes de que se completara el entrenamiento.
Tal vez hayas pensado: "¿No sería mejor si pudiera detener el entrenamiento cuando el modelo alcance el valor de exactitud deseado?".
Por ejemplo, si una exactitud del 95% es suficientemente buena y el modelo logra eso después de 3 ciclos de entrenamiento, ¿por qué esperar hasta que se completen muchos más ciclos?
La respuesta son las devoluciones de llamada.
Una devolución de llamada es una herramienta potente para personalizar el comportamiento de un modelo Keras durante el entrenamiento, la evaluación o la inferencia. Puedes definir una devolución de llamada para dejar de entrenar el modelo tan pronto este alcance una exactitud deseada en el conjunto de entrenamiento.
Prueba el siguiente código para ver qué sucede cuando defines una devolución de llamada para detener el entrenamiento cuando la exactitud alcanza un 84%:
-
Abre el Selector y elige Python3 para crear un nuevo notebook de Jupyter.
-
Guarda el archivo como
callback_model.ipynb
. -
Pega el siguiente código en la primera celda de
callback_model.ipynb
:
-
Presiona Ctrl + S o ve a Archivo > Save Notebook, para guardar los cambios.
-
Para ejecutar el código, haz clic en el botón Ejecutar o presiona Mayúsculas + Intro.
Observa que el entrenamiento se canceló después de unos cuantos ciclos.
Haz clic en Revisar mi progreso para verificar el objetivo.
Tarea 8. Experimenta con el modelo
En esta sección, experimentarás con las distintas capas de la red.
Ejercicio 1
En este ejercicio, explorarás las capas de tu modelo. ¿Qué ocurre cuando cambias la cantidad de neuronas?
-
Abre el Selector y elige Python3 para crear un nuevo notebook de Jupyter.
-
Guarda el archivo como
updated_model.ipynb
. -
Pega el siguiente código en la primera celda de
updated_model.ipynb
:
- Experimenta con diferentes valores para la capa densa.
Ve a la sección # Define the model
, cambia 64 por 128 neuronas:
-
Presiona Ctrl + S o ve a Archivo > Save Notebook, para guardar los cambios.
-
Para ejecutar el código, haz clic en el botón Ejecutar o presiona Mayúsculas + Intro.
¿Qué resultados diferentes obtienes para pérdida, tiempo de entrenamiento, etc.? ¿Por qué crees que pasa eso?
Cuando aumentas la cantidad de neuronas a 128, debes realizar más cálculos. Esto enlentece el proceso de entrenamiento. En este caso, el aumento tuvo un impacto positivo porque el modelo es más preciso. Pero no siempre se aplica esta lógica de "más es mejor". Puedes caer bajo los efectos de la ley de los rendimientos decrecientes muy rápido.
Haz clic en Revisar mi progreso para verificar el objetivo.
Ejercicio 2
Considera los efectos de las capas adicionales de la red. ¿Qué pasará si agregas otra capa entre las dos capas densas?
- En
updated_model.ipynb
, agrega una capa en la sección# Define the model
.
Reemplaza la definición de tu modelo por lo siguiente:
-
Presiona Ctrl + S o ve a Archivo > Save Notebook, para guardar los cambios.
-
Para ejecutar el código, haz clic en el botón Ejecutar o presiona Mayúsculas + Intro.
Respuesta: No hay un impacto significativo porque estos datos son relativamente simples. En el caso de datos más complejos, a menudo son necesarias capas adicionales.
Haz clic en Revisar mi progreso para verificar el objetivo.
Ejercicio 3
Antes de entrenar tu modelo, normalizaste los valores de píxeles en el rango de [0, 1]
. ¿Cuál sería el impacto de quitar la normalización para que los valores estén en el rango de [0, 255], como lo estaban originalmente en el conjunto de datos?
- Pruébalo. En la sección
# Define, load and configure data
, quita la función de asignación aplicada a los conjuntos de datos de entrenamiento y de prueba.
- Agrega este código al final de la celda para imprimir el valor máximo de la primera imagen en el lote 0. Sin la normalización, el valor máximo estará en el rango de
[0, 255]
.
- Tu modelo final
updated_model.ipynb
se verá de esta forma:
-
Presiona Ctrl + S o ve a Archivo > Save Notebook, para guardar los cambios.
-
Para ejecutar el código, haz clic en el botón Ejecutar o presiona Mayúsculas + Intro.
El resultado esperado para # Print out max value to see the changes
Después de completar los ciclos de entrenamiento, puedes ver la diferencia en la exactitud sin la normalización.
¿Por qué crees que cambia la exactitud?
Haz clic en Revisar mi progreso para verificar el objetivo.
Ejercicio 4
¿Qué ocurre si quitas la capa Flatten()
y por qué?
Adelante, pruébalo.
- En la sección
# Define the model
, quitatf.keras.layers.Flatten()
:
- Guarda y ejecuta la celda en
updated_model.ipynb
.
Recibes un error sobre la forma de los datos. Esta situación es esperable.
Los detalles del error pueden parecer poco claros en este momento, pero esto refuerza la regla general de que la primera capa de tu red debe tener la misma forma que tus datos. Ahora mismo, las imágenes de la entrada tienen la forma 28×28 y 28 capas de 28 neuronas no sería factible. Por eso, tiene más sentido nivelar ese valor 28,28 a 784×1.
En lugar de escribir todo el código para manejar esto por tu cuenta, puedes agregar la capa Flatten()
al principio. Cuando los arrays se carguen en el modelo más adelante, se nivelarán automáticamente por ti.
Ejercicio 5
Observa la capa (resultado) final. ¿Por qué hay 10 neuronas en esa capa? ¿Qué ocurre si tienes una cantidad distinta de 10?
Descúbrelo entrenando la red con 5.
- Reemplaza la sección
# Define the model
por lo siguiente para deshacer el cambio que realizaste en la sección previa.
- Cambia la cantidad de neuronas de la última capa de 10 a 5:
- Guarda y ejecuta la celda en
updated_model.ipynb
.
Qué ocurre: recibes un error apenas encuentra un valor imprevisto.
Otra regla general indica que la cantidad de neuronas de la última capa debe coincidir con la cantidad de clases para las que estás realizando la clasificación.. En este caso, son los dígitos del 0 al 9, por lo que hay 10 de ellas y deberías tener 10 neuronas en tu capa final.
¡Felicitaciones!
¡Felicitaciones! En este lab, aprendiste a diseñar, compilar, entrenar y evaluar un modelo de TensorFlow. También aprendiste a guardar y cargar modelos, y a escribir tus propias devoluciones de llamada para personalizar el comportamiento durante el entrenamiento. Asimismo, completaste una serie de ejercicios para guiarte por la experimentación con diferentes capas de la red.
Próximos pasos/Más información
- Consulta todo lo que hay que saber en el Curso intensivo de aprendizaje automático.
- Diviértete en la página Pruébala para tener una idea de qué puedes hacer con la visión artificial.
- Consulta el aprendizaje automático como parte de Vertex AI. Para ello revisa la Documentación de Vertex AI.
- Actividades divertidas con la IA. Consulta Experiments with Google.
- Obtén más información sobre TensorFlow.
Capacitación y certificación de Google Cloud
Recibe la formación que necesitas para aprovechar al máximo las tecnologías de Google Cloud. Nuestras clases incluyen habilidades técnicas y recomendaciones para ayudarte a avanzar rápidamente y a seguir aprendiendo. Para que puedas realizar nuestros cursos cuando más te convenga, ofrecemos distintos tipos de capacitación de nivel básico a avanzado: a pedido, presenciales y virtuales. Las certificaciones te ayudan a validar y demostrar tus habilidades y tu conocimiento técnico respecto a las tecnologías de Google Cloud.
Actualización más reciente del manual: 12 de septiembre de 2024
Prueba más reciente del lab: 12 de septiembre de 2024
Copyright 2024 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.