Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/pt-br/lite/models/convert/convert_models.md
25118 views

Converta modelos do TensorFlow

Esta página descreve como converter um modelo do TensorFlow para um do TensorFlow Lite (um formato FlatBuffer otimizado, indicado pela extensão de arquivo .tflite) usando o conversor do TensorFlow Lite.

Observação: este guia pressupõe que você tenha instalado o TensorFlow 2.x e treinado modelos no TensorFlow 2.x. Caso o seu modelo tenha sido treinado no TensorFlow 1.x, considere migrar para o TensorFlow 2.x. Para identificar a versão do TensorFlow instalada, execute print(tf.__version__).

Workflow de conversão

O diagrama abaixo ilustra o workflow geral para converter um modelo:

TFLite converter workflow

Figura 1. Workflow do conversor

É possível converter um modelo por uma das seguintes opções:

  1. API do Python (opção recomendada): permite integrar a conversão ao seu pipeline de desenvolvimento, aplicar otimizações, adicionar metadados e realizar diversas outras tarefas que simplificam o processo de conversão.

  2. Linha de comando: tem suporte somente à conversão básica de modelos.

Observação: caso haja problemas durante a conversão do modelo, crie um issue no GitHub.

API do Python

Código auxiliar: para saber mais sobre a API do conversor do TensorFlow Lite, execute print(help(tf.lite.TFLiteConverter)).

Converta um modelo do TensorFlow usando tf.lite.TFLiteConverter. Um modelo do TensorFlow é armazenado usando o formato SavedModel e é gerado usando as APIs de alto nível tf.keras.* (um modelo do Keras) ou as APIs de baixo nível tf.* (a partir das quais você gera funções concretas). Consequentemente, você tem as três opções abaixo (confira os exemplos nas próximas seções):

  • tf.lite.TFLiteConverter.from_saved_model() (opção recomendada): converte um SavedModel.

  • tf.lite.TFLiteConverter.from_keras_model(): converte um modelo do Keras.

  • tf.lite.TFLiteConverter.from_concrete_functions(): converte funções concretas.

Converta um SavedModel (recomendado)

O exemplo abaixo mostra como converter um SavedModel em um modelo do TensorFlow Lite.

import tensorflow as tf # Convert the model converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) # path to the SavedModel directory tflite_model = converter.convert() # Save the model. with open('model.tflite', 'wb') as f: f.write(tflite_model)

Converta um modelo do Keras

O exemplo abaixo mostra como converter um modelo do Keras em um modelo do TensorFlow Lite.

import tensorflow as tf # Create a model using high-level tf.keras.* APIs model = tf.keras.models.Sequential([ tf.keras.layers.Dense(units=1, input_shape=[1]), tf.keras.layers.Dense(units=16, activation='relu'), tf.keras.layers.Dense(units=1) ]) model.compile(optimizer='sgd', loss='mean_squared_error') # compile the model model.fit(x=[-1, 0, 1], y=[-3, -1, 1], epochs=5) # train the model # (to generate a SavedModel) tf.saved_model.save(model, "saved_model_keras_dir") # Convert the model. converter = tf.lite.TFLiteConverter.from_keras_model(model) tflite_model = converter.convert() # Save the model. with open('model.tflite', 'wb') as f: f.write(tflite_model)

Converta funções concretas

O exemplo abaixo mostra como converter funções concretas em um modelo do TensorFlow Lite.

import tensorflow as tf # Create a model using low-level tf.* APIs class Squared(tf.Module): @tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.float32)]) def __call__(self, x): return tf.square(x) model = Squared() # (ro run your model) result = Squared(5.0) # This prints "25.0" # (to generate a SavedModel) tf.saved_model.save(model, "saved_model_tf_dir") concrete_func = model.__call__.get_concrete_function() # Convert the model. converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func], model) tflite_model = converter.convert() # Save the model. with open('model.tflite', 'wb') as f: f.write(tflite_model)

Outros recursos

  • Aplique otimizações. Uma otimização usada com frequência é a quantização pós-treinamento, que pode reduzir a latência e o tamanho do modelo, com perda mínima da exatidão.

  • Adicione metadados, que facilitam a criação de código encapsulador para plataformas específicas ao implantar modelos em dispositivos.

Erros de conversão

Veja abaixo os erros de conversão comuns e suas respectivas soluções:

Ferramenta de linha de comando

Observação: é altamente recomendável usar a API do Python indicada acima, se possível.

Se você tiver instalado o TensorFlow 2.x via pip, use o comando tflite_convert. Para ver todos os sinalizadores disponíveis, use o seguinte comando:

$ tflite_convert --help `--output_file`. Type: string. Full path of the output file. `--saved_model_dir`. Type: string. Full path to the SavedModel directory. `--keras_model_file`. Type: string. Full path to the Keras H5 model file. `--enable_v1_converter`. Type: bool. (default False) Enables the converter and flags used in TF 1.x instead of TF 2.x. You are required to provide the `--output_file` flag and either the `--saved_model_dir` or `--keras_model_file` flag.

Se você tiver baixado o código-fonte do TensorFlow 2.x e quiser executar o conversor a partir dele sem compilar e instalar o pacote, pode substituir 'tflite_convert' por 'bazel run tensorflow/lite/python:tflite_convert --' no comando.

Como converter um SavedModel

tflite_convert \ --saved_model_dir=/tmp/mobilenet_saved_model \ --output_file=/tmp/mobilenet.tflite

Como converter um modelo H5 do Keras

tflite_convert \ --keras_model_file=/tmp/mobilenet_keras_model.h5 \ --output_file=/tmp/mobilenet.tflite

Próximos passos

Use o interpretador do TensorFlow Lite para executar a inferência em um dispositivo cliente (como um dispositivo móvel ou embarcado, por exemplo).