Path: blob/master/site/es-419/hub/tutorials/tf2_image_retraining.ipynb
25118 views
Copyright 2021 The TensorFlow Hub Authors.
Licensed under the Apache License, Version 2.0 (the "License");
Reentrenamiento de un clasificador de imágenes
Introducción
Los modelos de clasificación de imágenes tienen millones de parámetros. Entrenarlos desde cero requiere una gran cantidad de datos de entrenamiento etiquetados y mucha potencia de cálculo. El aprendizaje por transferencia es una técnica que acorta mucho el proceso al tomar una parte de un modelo que ya ha sido entrenado en una tarea relacionada y reutilizarla en un modelo nuevo.
En este Colab se enseña cómo construir un modelo de Keras para clasificar cinco especies de flores. Usaremos un TF2 SavedModel previamente entrenado de TensorFlow Hub para la extracción de características de imágenes, entrenado en el conjunto de datos ImageNet, que es mucho más grande y general. De forma opcional, el extractor de características se puede entrenar ("ajustar") junto con el clasificador recién agregado.
¿Prefiere una herramienta?
Este es un tutorial de codificación de TensorFlow. Si desea una herramienta que simplemente genere el modelo TensorFlow o TFLite, échele un vistazo a la herramienta de línea de comandos make_image_classifier que se instala mediante el paquete tensorflow-hub[make_image_classifier]
de PIP o en este Colab de TFLite.
Preparación
Seleccione el módulo TF2 SavedModel que usará
Para empezar, use https://tfhub.dev/google/imagenet/mobilenet_v2_100_224/feature_vector/4. Se puede usar la misma URL en el código para identificar el SavedModel y en su navegador para mostrar su documentación. (Tenga en cuenta que los modelos en formato TF1 Hub no funcionarán).
Puede encontrar más modelos TF2 que generan vectores de características de imagen aquí.
Hay varios modelos posibles para probar. Todo lo que necesita hacer es seleccionar uno diferente en la celda a continuación y seguir con el cuaderno.
Preparar el conjunto de datos de Flores
Las entradas se redimensionan adecuadamente para el módulo seleccionado. El aumento del conjunto de datos (es decir, las distorsiones aleatorias de una imagen cada vez que se lee) mejora el entrenamiento, especialmente. cuando se ajusta.
Definir el modelo
Solo hay que colocar un clasificador lineal sobre el feature_extractor_layer
con el módulo Hub.
Para mejorar la velocidad, comenzamos con una feature_extractor_layer
no entrenable, pero también se puede habilitar el ajuste para una mayor precisión.
Entrenar el modelo
Pruebe el modelo en una imagen de los datos de validación:
Finalmente, el modelo entrenado se puede guardar para implementarlo en TF Serving o TFLite (en dispositivos móviles) de la siguiente manera.
Opcional: implementación en TensorFlow Lite
TensorFlow Lite le permite implementar modelos de TensorFlow en dispositivos móviles y de IoT. El siguiente código muestra cómo convertir el modelo entrenado a TFLite y aplicar herramientas posteriores al entrenamiento del kit de herramientas de optimización de modelos de TensorFlow. Finalmente, lo ejecuta en TFLite Interpreter para examinar la calidad resultante.
La conversión sin optimización proporciona los mismos resultados que antes (hasta un error de redondeo).
La conversión con optimización sin ningún dato cuantifica los pesos del modelo a 8 bits, pero la inferencia aún usa el cálculo de punto flotante para las activaciones de la red neuronal. Esto reduce el tamaño del modelo casi en un factor de 4 y mejora la latencia de la CPU en dispositivos móviles.
Además, el cálculo de las activaciones de la red neuronal también se puede cuantificar en números enteros de 8 bits si se proporciona un pequeño conjunto de datos de referencia para calibrar el rango de cuantificación. En un dispositivo móvil, esto acelera aún más la inferencia y permite ejecutar aceleradores como Edge TPU.