Path: blob/master/site/pt-br/lite/performance/post_training_quant.ipynb
25118 views
Copyright 2019 The TensorFlow Authors.
Quantização de intervalo dinâmico pós-treinamento
Visão geral
O TensorFlow Lite é agora compatível com a conversão de pesos para a precisão de 8 bits como parte da conversão do modelo do GraphDefs do TensorFlow para o formato de flatbuffer do TensorFlow Lite. A quantização de intervalo dinâmico obtém uma redução de 4 vezes no tamanho do modelo. Além disso, o TFLite é compatível com a quantização e desquantização ao vivo de ativações para permitir:
O uso de kernels quantizados para uma implementação mais rápida, quando disponível.
A combinação de kernels de ponto flutuante com kernels quantizados para diferentes partes do grafo.
As ativações são sempre armazenadas em ponto flutuante. Para operações compatíveis com kernels quantizados, as ativações são quantizadas dinamicamente para a precisão de 8 bits antes do processamento e são desquantizadas para a precisão de float após o processamento. Dependendo do modelo que está sendo convertido, isso pode proporcionar um speedup em relação à computação pura de ponto flutuante.
Em contraste com o treinamento consciente de quantização, os pesos são quantizados pós-treinamento e as ativações são quantizadas dinamicamente durante a inferência nesse método. Portanto, os pesos do modelo não são treinados novamente para compensar os erros induzidos pela quantização. É importante conferir a exatidão do modelo quantizado para garantir que a degradação seja aceitável.
Neste tutorial, você vai treinar um modelo MNIST do zero, verificar a exatidão no TensorFlow e converter o modelo em um flatbuffer do TensorFlow Lite com a quantização de intervalo dinâmico. Por fim, você vai conferir a exatidão do modelo convertido e compará-lo ao modelo float original.
Crie um modelo MNIST
Configuração
Treine um modelo do TensorFlow
Para o exemplo, como você treinou o modelo por apenas uma única época, ele só treina com uma exatidão de aproximadamente 96%.
Converta para um modelo do TensorFlow Lite
Usando o Conversor do TensorFlow Lite, você pode converter o modelo treinado em um modelo do TensorFlow Lite.
Agora carregue o modelo usando o TFLiteConverter
:
Escreva em um arquivo .tflite:
Para quantizar o modelo na exportação, configure a flag optimizations
para otimizar o tamanho:
O arquivo resultante tem aproximadamente 1/4
do tamanho.
Execute os modelos do TFLite
Execute o modelo do TensorFlow Lite usando o interpretador do TensorFlow Lite em Python.
Carregue o modelo em um interpretador
Teste o modelo em uma imagem
Avalie os modelos
Repita a avaliação no modelo quantizado em intervalo dinâmico para obter o seguinte:
Nesse exemplo, o modelo comprimido não tem nenhuma diferença na exatidão.
Otimizando um modelo existente
As resnets com camadas de pré-ativação (Resnet-v2) são amplamente usadas para aplicativos de visão. O grafo congelado pré-treinado para a resnet-v2-101 está disponível no TensorFlow Hub.
Você pode converter o grafo congelado em um flatbuffer do TensorFlow Lite com a quantização da seguinte maneira:
O tamanho do modelo é reduzido de 171 MB para 43 MB. A exatidão dele na imagenet pode ser avaliada usando os scripts fornecidos pela medição de exatidão do TFLite.
A exatidão top-1 do modelo otimizado é 76,8, a mesma que o modelo de ponto flutuante.