Introducció a TensorFlow Lite
TensorFlow Lite és una versió de TensorFlow optimitzada per a dispositius mòbils i integrats. Permet executar models d'aprenentatge automàtic en dispositius amb recursos limitats, com telèfons intel·ligents, tauletes i dispositius IoT. TensorFlow Lite està dissenyat per ser lleuger i eficient, oferint una latència baixa i un rendiment alt.
Objectius d'aquest tema:
- Entendre què és TensorFlow Lite i per què és útil.
- Aprendre a convertir un model de TensorFlow a TensorFlow Lite.
- Executar models de TensorFlow Lite en dispositius mòbils.
- Optimitzar models per a TensorFlow Lite.
Què és TensorFlow Lite?
TensorFlow Lite és una biblioteca que permet executar models de TensorFlow en dispositius mòbils i integrats. Està dissenyat per ser lleuger i eficient, amb l'objectiu de proporcionar una latència baixa i un alt rendiment en dispositius amb recursos limitats.
Característiques clau:
- Lleugeresa: Optimitzat per a dispositius amb recursos limitats.
- Latència baixa: Dissenyat per a aplicacions en temps real.
- Compatibilitat: Suporta una àmplia gamma de dispositius i sistemes operatius.
- Facilitat d'ús: Proporciona eines per convertir i optimitzar models de TensorFlow.
Conversió d'un model de TensorFlow a TensorFlow Lite
Per utilitzar TensorFlow Lite, primer hem de convertir un model de TensorFlow a un format compatible amb TensorFlow Lite. Aquest procés es coneix com a "quantització" i implica la reducció de la precisió dels pesos del model per fer-lo més lleuger i eficient.
Passos per convertir un model:
-
Crear o carregar un model de TensorFlow:
import tensorflow as tf # Crear un model simple model = tf.keras.models.Sequential([ tf.keras.layers.Dense(10, activation='relu', input_shape=(784,)), tf.keras.layers.Dense(10, activation='softmax') ]) # Compilar el model model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # Entrenar el model # model.fit(x_train, y_train, epochs=5)
-
Convertir el model a TensorFlow Lite:
# Convertir el model a TensorFlow Lite converter = tf.lite.TFLiteConverter.from_keras_model(model) tflite_model = converter.convert() # Guardar el model convertit with open('model.tflite', 'wb') as f: f.write(tflite_model)
Explicació del codi:
- Crear un model: Utilitzem
tf.keras
per crear un model simple amb dues capesDense
. - Compilar el model: Compilem el model amb l'optimitzador
adam
i la funció de pèrduasparse_categorical_crossentropy
. - Convertir el model: Utilitzem
TFLiteConverter
per convertir el model de Keras a un model de TensorFlow Lite. - Guardar el model: Guardem el model convertit en un fitxer
.tflite
.
Executar models de TensorFlow Lite en dispositius mòbils
Un cop hem convertit el model, podem executar-lo en un dispositiu mòbil utilitzant l'API de TensorFlow Lite. A continuació es mostra un exemple de com fer-ho en Android.
Exemple en Android:
-
Afegir la dependència de TensorFlow Lite al
build.gradle
:implementation 'org.tensorflow:tensorflow-lite:2.5.0'
-
Carregar el model en l'aplicació Android:
try { Interpreter tflite = new Interpreter(loadModelFile()); } catch (Exception e) { e.printStackTrace(); } private MappedByteBuffer loadModelFile() throws IOException { AssetFileDescriptor fileDescriptor = this.getAssets().openFd("model.tflite"); FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor()); FileChannel fileChannel = inputStream.getChannel(); long startOffset = fileDescriptor.getStartOffset(); long declaredLength = fileDescriptor.getDeclaredLength(); return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength); }
-
Executar el model:
float[][] input = new float[1][784]; // Exemple d'entrada float[][] output = new float[1][10]; // Exemple de sortida tflite.run(input, output);
Explicació del codi:
- Afegir la dependència: Afegim la dependència de TensorFlow Lite al fitxer
build.gradle
. - Carregar el model: Utilitzem
Interpreter
per carregar el model.tflite
des dels recursos de l'aplicació. - Executar el model: Utilitzem el mètode
run
per executar el model amb una entrada i obtenir la sortida.
Optimització de models per a TensorFlow Lite
Per millorar el rendiment dels models en dispositius mòbils, podem aplicar diverses tècniques d'optimització, com la quantització.
Quantització:
La quantització redueix la precisió dels pesos del model, disminuint la mida del model i millorant el rendiment.
Exemple de quantització:
# Convertir el model amb quantització converter = tf.lite.TFLiteConverter.from_keras_model(model) converter.optimizations = [tf.lite.Optimize.DEFAULT] tflite_model = converter.convert() # Guardar el model quantitzat with open('model_quantized.tflite', 'wb') as f: f.write(tflite_model)
Explicació del codi:
- Quantització: Utilitzem l'opció
optimizations
per aplicar la quantització al model durant la conversió.
Exercicis pràctics
Exercici 1: Convertir un model existent a TensorFlow Lite
- Crea o carrega un model de TensorFlow.
- Converteix el model a TensorFlow Lite.
- Guarda el model convertit en un fitxer
.tflite
.
Exercici 2: Executar un model de TensorFlow Lite en Android
- Crea una aplicació Android.
- Afegeix la dependència de TensorFlow Lite.
- Carrega i executa el model en l'aplicació.
Solucions
Solució a l'Exercici 1:
import tensorflow as tf # Crear un model simple model = tf.keras.models.Sequential([ tf.keras.layers.Dense(10, activation='relu', input_shape=(784,)), tf.keras.layers.Dense(10, activation='softmax') ]) # Compilar el model model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # Convertir el model a TensorFlow Lite converter = tf.lite.TFLiteConverter.from_keras_model(model) tflite_model = converter.convert() # Guardar el model convertit with open('model.tflite', 'wb') as f: f.write(tflite_model)
Solució a l'Exercici 2:
// build.gradle implementation 'org.tensorflow:tensorflow-lite:2.5.0' // MainActivity.java try { Interpreter tflite = new Interpreter(loadModelFile()); } catch (Exception e) { e.printStackTrace(); } private MappedByteBuffer loadModelFile() throws IOException { AssetFileDescriptor fileDescriptor = this.getAssets().openFd("model.tflite"); FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor()); FileChannel fileChannel = inputStream.getChannel(); long startOffset = fileDescriptor.getStartOffset(); long declaredLength = fileDescriptor.getDeclaredLength(); return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength); } float[][] input = new float[1][784]; // Exemple d'entrada float[][] output = new float[1][10]; // Exemple de sortida tflite.run(input, output);
Conclusió
En aquest tema, hem après què és TensorFlow Lite i com ens pot ajudar a executar models d'aprenentatge automàtic en dispositius mòbils i integrats. Hem vist com convertir un model de TensorFlow a TensorFlow Lite, com executar-lo en un dispositiu mòbil i com optimitzar-lo per millorar el rendiment. A més, hem proporcionat exercicis pràctics per reforçar els conceptes apresos. En el següent tema, explorarem TensorFlow.js i com portar models d'aprenentatge automàtic al navegador web.
Curs de TensorFlow
Mòdul 1: Introducció a TensorFlow
- Què és TensorFlow?
- Configuració de TensorFlow
- Conceptes bàsics de TensorFlow
- Hola món amb TensorFlow
Mòdul 2: Conceptes bàsics de TensorFlow
Mòdul 3: Gestió de dades a TensorFlow
Mòdul 4: Construcció de xarxes neuronals
- Introducció a les xarxes neuronals
- Creació d'una xarxa neuronal simple
- Funcions d'activació
- Funcions de pèrdua i optimitzadors
Mòdul 5: Xarxes neuronals convolucionals (CNNs)
Mòdul 6: Xarxes neuronals recurrents (RNNs)
- Introducció a les RNNs
- Construcció d'una RNN
- Memòria a llarg termini (LSTM)
- Unitats recurrents amb porta (GRUs)
Mòdul 7: Tècniques avançades de TensorFlow
- Capes i models personalitzats
- TensorFlow Hub
- Aprenentatge per transferència
- Ajust de hiperparàmetres