Path: blob/master/site/es-419/lite/examples/on_device_training/overview.ipynb
25118 views
Copyright 2021 The TensorFlow Authors.
Entrenamiento en el dispositivo con TensorFlow Lite
Al implementar un modelo de aprendizaje automático de TensorFlow Lite en un dispositivo o app móvil, es posible que desee permitir que el modelo se mejore o personalice en función de las aportaciones del dispositivo o del usuario final. Usar técnicas de entrenamiento en el dispositivo le permite actualizar un modelo sin que los datos salgan de los dispositivos de sus usuarios, mejorando la privacidad del usuario y sin necesidad de que los usuarios actualicen el software del dispositivo.
Por ejemplo, puede tener un modelo en su app móvil que reconozca artículos de moda, pero quiere que los usuarios mejoren el rendimiento del reconocimiento con el tiempo en función de sus intereses. Habilitar el entrenamiento en el dispositivo permite a los usuarios interesados en el calzado mejorar en el reconocimiento de un estilo o marca de zapatos concretos cuanto más a menudo usen su app.
Este tutorial le muestra cómo construir un modelo TensorFlow Lite que puede ser entrenado y mejorado de forma incremental dentro de una app Android instalada.
Nota: La técnica de entrenamiento en el dispositivo puede añadirse a las implementaciones existentes de TensorFlow Lite, siempre que los dispositivos a los que se dirija admitan el almacenamiento local de archivos.
Configuración
Este tutorial usa Python para entrenar y convertir un modelo TensorFlow antes de incorporarlo a una app Android. Empiece instalando e importando los siguientes paquetes.
Nota: Las API de entrenamiento en el dispositivo están disponibles a partir de la versión 2.7 de TensorFlow.
Clasifique imágenes de prendas de vestir
Este código de ejemplo usa el conjunto de datos Fashion MNIST para entrenar un modelo de red neuronal para clasificar imágenes de ropa. Este conjunto de datos contiene 60,000 imágenes pequeñas (28 x 28 pixel) en escala de grises que contienen 10 categorías diferentes de accesorios de moda, incluidos vestidos, camisas y sandalias.
<figure> <img src="https://tensorflow.org/images/fashion-mnist-sprite.png" alt="Fashion MNIST images"> <figcaption><b>Figure 1</b>: <a href="https://github.com/zalandoresearch/fashion-mnist">Fashion-MNIST samples</a> (by Zalando, MIT License).</figcaption> </figure>
Puede explorar este conjunto de datos en mayor profundidad en el Tutorial de clasificación de Keras.
Genere un modelo para el entrenamiento en el dispositivo
Los modelos TensorFlow Lite suelen tener un único método (o firma) de función expuesto que le permite llamar al modelo para ejecutar una inferencia. Para que un modelo pueda ser entrenado y usado en un dispositivo, debe ser capaz de realizar varias operaciones separadas, incluyendo las funciones de entrenamiento, inferencia, guardado y restauración del modelo. Puede habilitar esta funcionalidad ampliando primero su modelo TensorFlow para que tenga varias funciones, y luego exponiendo esas funciones como firmas cuando convierta su modelo al formato de modelo TensorFlow Lite.
El siguiente ejemplo de código muestra cómo añadir las siguientes funciones a un modelo TensorFlow:
la función
train
entrena el modelo con datos de entrenamiento.la función
infer
invoca la inferencia.la función
save
guarda las ponderaciones entrenables en el sistema de archivos.la función
restore
carga las ponderaciones entrenables desde el sistema de archivos.
La función train
del código anterior usa la clase GradientTape para registrar las operaciones de diferenciación automática. Para más información sobre cómo usar esta clase, consulte la Introducción a los gradientes y la diferenciación automática.
Usted podría usar el método Model.train_step
del modelo Keras aquí en lugar de una implementación desde cero. Sólo tenga en cuenta que la pérdida (y las métricas) devueltas por Model.train_step
es el promedio actual, y debe restablecerse regularmente (normalmente cada época). Consulte Personalizar Model.fit para más detalles.
Nota: Las ponderaciones generadas por este modelo se serializan en un archivo de puntos de verificación de formato TensorFlow 1.
Prepare los datos
Obtenga el conjunto de datos MNIST de moda para el entrenamiento de su modelo.
Preprocese el conjunto de datos
Los valores de los pixel en este conjunto de datos están entre 0 y 255, y deben ser normalizados a un valor entre 0 y 1 para ser procesados por el modelo. Divida los valores por 255 para realizar este ajuste.
Convierta las etiquetas de los datos en valores categóricos realizando una codificación en un solo paso.
Nota: Asegúrese de preprocesar sus conjuntos de datos de entrenamiento y de prueba del mismo modo, para que sus pruebas evalúen con precisión el rendimiento de su modelo.
Entrene el modelo
Antes de convertir y configurar su modelo TensorFlow Lite, complete el entrenamiento inicial de su modelo usando el conjunto de datos preprocesados y el método de firma train
. El siguiente código ejecuta el entrenamiento del modelo durante 100 épocas, procesando lotes de 100 imágenes a la vez y mostrando el valor de pérdida después de cada 10 épocas. Dado que esta ejecución de entrenamiento procesa bastantes datos, puede tardar unos minutos en finalizar.
Nota: Debe completar el entrenamiento inicial de su modelo antes de convertirlo al formato TensorFlow Lite, para que el modelo tenga un conjunto inicial de ponderaciones y sea capaz de realizar inferencias razonables antes de empezar a recopilar datos y realizar ejecuciones de entrenamiento en el dispositivo.
Convierta el modelo al formato TensorFlow Lite
Una vez que haya ampliado su modelo TensorFlow para habilitar funciones adicionales para el entrenamiento en el dispositivo y haya completado el entrenamiento inicial del modelo, puede convertirlo al formato TensorFlow Lite. El siguiente código convierte y guarda su modelo a ese formato, incluyendo el conjunto de firmas que se usan con el modelo TensorFlow Lite en un dispositivo: train, infer, save, restore
.
Configure las firmas de TensorFlow Lite
El modelo TensorFlow Lite que guardó en el paso anterior contiene varias firmas de funciones. Puede acceder a ellas a través de la clase tf.lite.Interpreter
e invocar cada firma restore
, train
, save
, y infer
por separado.
Compare los resultados del modelo original y del modelo lite convertido:
Arriba puede ver que el comportamiento del modelo no cambia por la conversión a TFLite.
Reentrene el modelo en un dispositivo
Tras convertir su modelo a TensorFlow Lite e implementarlo con su app, puede volver a entrenar el modelo en un dispositivo utilizando nuevos datos y el método de firma train
de su modelo. Cada ejecución de entrenamiento genera un nuevo conjunto de ponderaciones que puede guardar para reutilizar y seguir mejorando el modelo, como se muestra en la siguiente sección.
Nota: Dado que las tareas de entrenamiento consumen muchos recursos, debería considerar realizarlas cuando los usuarios no estén interactuando activamente con el dispositivo, y como proceso en segundo plano. Considere usar la API WorkManager para programar el reentrenamiento del modelo como una tarea asíncrona.
En Android, puede realizar el entrenamiento en el dispositivo con TensorFlow Lite usando las API de Java o C++. En Java, use la clase Interpreter
para cargar un modelo y conducir las tareas de entrenamiento del modelo. El siguiente ejemplo muestra cómo ejecutar el procedimiento de entrenamiento usando el método runSignature
:
Puede ver un ejemplo de código completo de reentrenamiento de modelos dentro de una app Android en la demo model personalization demo app.
Ejecute el entrenamiento durante algunas épocas para mejorar o personalizar el modelo. En la práctica, usted ejecutaría este entrenamiento adicional usando los datos recopilados en el dispositivo. Para simplificar, este ejemplo usa los mismos datos de entrenamiento que el paso de entrenamiento anterior.
Arriba puede ver que el entrenamiento en el dispositivo se retoma exactamente donde se detuvo el preentrenamiento.
Guarde las ponderaciones entrenadas
Cuando se completa una ejecución de entrenamiento en un dispositivo, el modelo actualiza el conjunto de ponderaciones que está usando en la memoria. Usando el método de firma save
que creó en su modelo TensorFlow Lite, puede guardar estas ponderaciones en un archivo de punto de verificación para reutilizarlas posteriormente y mejorar su modelo.
En su aplicación Android, puede almacenar las ponderaciones generadas como un archivo de punto de verificación en el espacio de almacenamiento interno asignado a su app.
Recupere las ponderaciones entrenadas
Cada vez que cree un intérprete a partir de un modelo TFLite, el intérprete cargará inicialmente las ponderaciones originales del modelo.
Así que después de haber realizado algún entrenamiento y guardado un archivo de punto de verificación, tendrá que ejecutar el método de firma restore
para cargar el punto de verificación.
Una buena regla es "Cada vez que cree un intérprete para un modelo, si el punto de verificación existe, cárguelo". Si necesita restablecer el modelo al comportamiento de la línea de referencia, sólo tiene que borrar el punto de verificación y crear un intérprete nuevo.
El punto de verificación se generó entrenando y guardando con TFLite. Arriba puede ver que al aplicar el punto de verificación se actualiza el comportamiento del modelo.
Nota: La carga de las ponderaciones guardadas del punto de verificación puede llevar tiempo, en función del número de variables del modelo y del tamaño del archivo del punto de verificación.
En su app para Android, puede restaurar las ponderaciones serializadas y entrenadas desde el archivo de puntos de verificación que almacenó anteriormente.
Nota: Cuando se reinicie su aplicación, deberá volver a cargar las ponderaciones entrenadas antes de ejecutar nuevas inferencias.
Ejecute la inferencia usando ponderaciones entrenadas
Una vez que haya cargado las ponderaciones guardadas previamente desde un archivo de punto de verificación, la ejecución del método infer
usa esas ponderaciones con su modelo original para mejorar las predicciones. Después de cargar las ponderaciones guardadas, puede usar el método de firma infer
como se muestra a continuación.
Nota: No es necesario cargar las ponderaciones guardadas para ejecutar una inferencia, pero ejecutarla en esa configuración produce predicciones usando el modelo entrenado originalmente, sin mejoras.
Trace las etiquetas predichas.
En su aplicación Android, tras restaurar las ponderaciones entrenadas, ejecute las inferencias basadas en los datos cargados.
¡Felicidades! Acaba de crear un modelo TensorFlow Lite compatible con el entrenamiento en el dispositivo. Para más detalles de codificación, consulte el ejemplo de implementación en la app de demostración de personalización de modelos.
Si está interesado en aprender más sobre la clasificación de imágenes, consulte el Tutorial de clasificación de Keras en la página de la guía oficial de TensorFlow. Este tutorial se basa en ese ejercicio y profundiza en el tema de la clasificación.