Path: blob/master/site/pt-br/lite/examples/on_device_training/overview.ipynb
25118 views
Copyright 2021 The TensorFlow Authors.
Treinamento no dispositivo com o TensorFlow Lite
Ao implantar o modelo de aprendizado de máquina do TensorFlow Lite em dispositivos ou aplicativos móveis, talvez você queira permitir que o modelo seja aprimorado ou personalizado com entradas feitas no dispositivo ou pelo usuário final. Ao usar técnicas de treinamento no dispositivo, você pode atualizar um modelo sem que os dados saiam do dispositivos do usuário, o que aumenta a privacidade dos usuários, e sem exigir que os usuários atualizem o software do dispositivo.
Por exemplo: talvez você tenha um modelo em seu aplicativo móvel que reconheça itens de moda, mas deseja que os usuários obtenham um maior desempenho de reconhecimento ao longo do tempo com base nos interesses deles. Com o treinamento no dispositivo, os usuários que tiverem interesse em sapatos podem reconhecer melhor um estilo específico de sapato ou uma marca específica quanto mais usarem seu aplicativo.
Este tutorial mostra como criar um modelo do TensorFlow Lite que pode ser treinado e aprimorado incrementalmente em um aplicativo instalado no Android.
Observação: a técnica de treinamento no dispositivo pode ser adicionada a implementações existentes do TensorFlow Lite, desde que os dispositivos desejados tenham suporte a armazenamento local de arquivos.
Configuração
Neste tutorial, usamos o Python para treinar e converter um modelo do TensorFlow antes de incorporá-lo a um aplicativo para Android. Comece instalando e importando os seguintes pacotes:
Observação: as APIs de treinamento no dispositivo estão disponíveis a partir de versão 2.7 do TensorFlow.
Classifique imagens de roupas
O código deste exemplo usa o dataset Fashion MNIST para treinar um modelo de rede neural de classificação de imagens de roupas. Esse dataset contém 60 mil imagens pequenas (28 x 28 pixels) em escala de cinza, contendo 10 categorias diferentes de acessórios de moda, incluindo vestidos, saias e sandálias.
<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>
Confira este dataset com maiores detalhes no tutorial de classificação do Keras.
Crie um modelo para treinamento no dispositivo
Tipicamente, os modelos do TensorFlow Lite têm apenas um único método de função exposto (ou assinatura) que permite chamar o modelo para executar a inferência. Para que um modelo seja treinado e usado em um dispositivo, você precisa poder realizar diversas operações separadas, incluindo treinar, inferir, salvar e restaurar funções para o modelo. Para ativar essas funcionalidades, primeiro você deve estender seu modelo do TensorFlow para que ele tenha diversas funções e depois deve expor essas funções como assinaturas ao converter o modelo para o formato do TensorFlow Lite.
O exemplo de código abaixo mostra como adicionar as seguintes funções a um modelo do TensorFlow:
A função
train
treina o modelo com os dados de treinamento.A função
infer
chama a inferência.A função
save
salva os pesos treináveis no sistema de arquivos.A função
restore
carrega os pesos treináveis a partir do sistema de arquivos.
A função train
no código acima usa a classe GradientTape para registrar operações para diferenciação automática. Confira mais informações sobre como usar essa classe no artigo Introdução aos gradientes e à diferenciação automática.
Você pode usar o método Model.train_step
do modelo do Keras aqui em vez de fazer uma implementação do zero. Observe apenas que a perda (e as métricas) retornada por Model.train_step
é a média móvel e deve ser redefinida regularmente (geralmente, a cada época). Confira mais detalhes em Personalize Model.fit.
Observação: os pesos gerados por este modelo são serializados em um arquivo de checkpoint no formato do TensorFlow 1.
Prepare os dados
Baixe o dataset Fashion MNIST para treinar o modelo.
Faça o pré-processamento do dataset
Os valores de pixel neste dataset vão de 0 a 255 e precisam ser normalizados para um valor entre 0 e 1 para processamento pelo modelo. Divida os valores por 255 para fazer esse ajuste.
Faça o encoding one-hot para converter os rótulos de dados em valores de categoria.
Observação: você deve pré-processar os datasets de treinamento e teste da mesma forma para que o desempenho do seu modelo seja avaliado de maneira exata.
Treine o modelo
Antes de converter e configurar seu modelo do TensorFlow Lite, conclua o treinamento inicial do modelo usando o dataset pré-processado e o método de assinatura train
. O código abaixo executa o treinamento do modelo com 100 épocas, processando lotes de 100 imagens de cada vez e exibindo o valor de perda a cada 10 épocas. Como a execução desse treinamento processa muitos dados, pode levar alguns minutos para ser concluída.
Observação: você precisa concluir o treinamento inicial do modelo antes de convertê-lo para o formato do TensorFlow Lite para que ele tenha um conjunto inicial de pesos e consiga fazer inferências relevantes antes de você começar a coletar dados e fazer execuções de treinamento no dispositivo.
Converta o modelo para o formato do TensorFlow Lite
Após estender o modelo do TensorFlow para permitir as funções adicionais de treinamento no dispositivo e após concluir o treinamento inicial do modelo, você pode convertê-lo para o formato do TensorFlow Lite. O código abaixo converte e salva seu modelo nesse formato, incluindo o conjunto de assinaturas usadas com o modelo do TensorFlow Lite em um dispositivo: train, infer, save, restore
.
Configure as assinaturas do TensorFlow Lite
O modelo do TensorFlow Lite que você salvou na etapa anterior contém diversas assinaturas de função. É possível acessá-las pela classe tf.lite.Interpreter
e chamar cada assinatura restore
, train
, save
e infer
separadamente.
Compare a saída do modelo original com a saída do modelo convertido para TF Lite:
Podemos ver acima que o comportamento do modelo não foi alterado pela conversão para o TF Lite.
Treine novamente o modelo em um dispositivo
Após converter o modelo para o TensowFlow Lite e implantá-lo no seu aplicativo, você pode treinar o modelo novamente em um dispositivo usando novos dados e o método de assinatura train
do modelo. Cada execução do treinamento gera um novo conjunto de pesos que você pode salvar para reutilização e melhoria do modelo posteriores, conforme mostrado na próxima seção.
Observação: como as tarefas de treinamento consomem muitos recursos, considere realizá-las quando os usuários não estiverem interagindo ativamente com o dispositivo e como um processo de segundo plano. Considere usar a API WorkManager para agendar novos treinamentos do modelo como uma tarefa assíncrona.
No Android, você pode fazer o treinamento no dispositivo com o TensorFlow Lite usando as APIs do Java ou do C++. No Java, use a classe Interpreter
para carregar um modelo e fazer as tarefas de treinamento. O exemplo abaixo mostra como executar o procedimento de treinamento usando o método runSignature
:
Confira o código completo de exemplo do modelo de novos treinamentos em um aplicativo para Android no Aplicativo de demonstração de personalização de modelos.
Execute algumas épocas de treinamento para melhorar ou personalizar o modelo. Na prática, você executaria esse treinamento adicional usando os dados coletados no dispositivo. Por questões de simplicidade, usamos neste exemplo os mesmos dados de treinamento utilizados no passo de treinamento anterior.
Podemos ver acima que o treinamento no dispositivo retoma exatamente de onde o pré-treinamento parou.
Salve os pesos treinados
Ao concluir uma execução de treinamento em um dispositivo, o modelo atualiza o conjunto de pesos que está usando em memória. Ao usar o método de assinatura save
criado no modelo do TensorFlow Lite, você pode salvar esses pesos em um arquivo de checkpoint para reutilização e melhoria do modelo posteriores.
Em um aplicativo para Android, você pode armazenar os pesos gerados como um arquivo de checkpoint no espaço de armazenamento interno alocado para seu aplicativo.
Restaure os pesos treinados
Sempre que você cria um interpretador a partir de um modelo do TF Lite, o interpretador carrega inicialmente os pesos originais do modelo.
Portanto, após você fazer alguns treinamentos e salvar um arquivo de checkpoint, precisará executar o método de assinatura restore
para carregar o checkpoint.
Uma ótima regra é: "Sempre que você criar um interpretador para um modelo, se o checkpoint existir, carregue-o". Se você precisar redefinir o modelo para o comportamento de linha de base, basta excluir o checkpoint e criar um novo interpretador.
O checkpoint foi gerado ao treinar e salvar com o TF Lite. Podemos ver acima que, ao aplicar o checkpoint, o comportamento do modelo é atualizado.
Observação: carregar os pesos do modelo usando o checkpoint pode demorar um pouco, dependendo do número de variáveis do modelo e do tamanho do arquivo de checkpoint.
Em seu aplicativo para Android, você pode restaurar os pesos treinados e serializados usando o arquivo de checkpoint armazenado anteriormente.
Observação: quando o aplicativo reiniciar, você deve recarregar os pesos treinados antes de fazer novas inferências.
Execute a inferência usando os pesos treinados
Após carregar os pesos salvos anteriormente usando um arquivo de checkpoint, esses pesos são usados com seu modelo original para melhorar as previsões ao executar o método infer
. Após carregar os pesos salvos, você pode usar o método de assinatura infer
conforme mostrado abaixo.
Observação: não é obrigatório carregar os pesos salvos para executar uma inferência, mas fazer uma execução nessa configuração gera previsões usando o modelo treinado originalmente, sem nenhuma melhoria.
Plote os rótulos previstos.
No aplicativo para Android, após restaurar os pesos treinados, execute as inferências com base nos dados carregados.
Parabéns! Você criou um modelo do TensorFlow Lite com suporte a treinamento no dispositivo. Confira mais detalhes do código da implementação do exemplo no Aplicativo de demonstração de personalização de modelos.
Se você quiser saber mais sobre a classificação de imagens, confira o tutorial de classificação do Keras na página do guia oficial do TensorFlow. Este tutorial foi baseado nesse exercício, que fornece mais detalhes sobre o assunto de classificação.