Path: blob/master/site/pt-br/model_optimization/guide/combine/pqat_example.ipynb
25118 views
Copyright 2021 The TensorFlow Authors.
Exemplo do Keras de treinamento consciente de quantização que preserva o pruning (PQAT)
Visão geral
Este é um exemplo completo que mostra o uso da API de treinamento consciente de quantização que preserva o pruning (PQAT), parte do pipeline de otimização colaborativa do Kit de ferramentas para otimização de modelos do TensorFlow.
Outras páginas
Para uma introdução sobre o pipeline e outras técnicas disponíveis, confira a página de visão geral da otimização colaborativa.
Conteúdo
Neste tutorial, você:
Treinará um modelo
tf.keras
para o dataset MNIST do zero.Ajustará o modelo com o pruning, usando a API de esparsidade, e verá a exatidão.
Aplicará o QAT e observará a perda de esparsidade.
Aplicará o PQAT e observará se a esparsidade aplicada antes foi preservada.
Gerará um modelo do TFLite e observará os efeitos da aplicação do PQAT nele.
Comparará a exatidão de modelo alcançada pelo PQAT com um modelo quantizado com a quantização pós-treinamento.
Configuração
Você pode executar este Notebook do Jupyter no seu virtualenv local ou no colab. Para mais detalhes sobre como configurar as dependências, consulte o guia de instalação.
Treine um modelo tf.keras para o MNIST sem o pruning
Avalie o modelo de referência e salve-o para usar mais tarde
Faça o pruning e ajuste o modelo para 50% da esparsidade
Aplique a API prune_low_magnitude()
para podar todo o modelo pré-treinado a fim de demonstrar e observar a eficácia em reduzir o tamanho do modelo após a aplicação do zip, mantendo a exatidão. Para saber como melhor usar a API para alcançar a melhor proporção de compressão e ainda manter a exatidão alvo, consulte o guia completo de pruning.
Defina o modelo e aplique a API de esparsidade
O modelo precisa ser pré-treinado antes de usar a API de esparsidade.
Ajuste o modelo e compare a exatidão dele com a referência
Ajuste o modelo com o pruning para 3 épocas.
Defina funções helper para calcular e imprimir a esparsidade do modelo.
Confira se o modelo foi podado corretamente. Precisamos retirar o wrapper de pruning primeiro.
Nesse exemplo, há uma perda mínima na exatidão do teste após o pruning, em comparação com a referência.
Aplique o QAT e o PQAT e confira o efeito na esparsidade do modelo em ambos os casos
Em seguida, vamos aplicar o QAT e o QAT que preserva o pruning (PQAT) no modelo podado e observar se o PQAT preserva a esparsidade no modelo podado. Perceba que retiramos os wrappers de pruning do modelo com tfmot.sparsity.keras.strip_pruning
antes de aplicar a API de PQAT.
Veja os benefícios da compressão do modelo de PQAT
Defina a função helper para obter um arquivo de modelo compactado.
Como esse modelo é pequeno, a diferença entre os dois modelos não é muito perceptível. A aplicação do pruning e do PQAT a um modelo de produção maior geraria uma compressão mais significativa.
Veja a persistência da exatidão do TF para o TFLite
Defina uma função helper para avaliar o modelo do TFLite com o dataset de teste.
Avalie o modelo após o pruning e a quantização e veja se a exatidão do TensorFlow persiste no back-end do TFLite.
Aplique a quantização pós-treinamento e compare com o modelo de PQAT
Em seguida, vamos usar a quantização pós-treinamento (sem ajustes) no modelo podado e verificar a exatidão em relação ao modelo de PQAT. Isso demonstra por que você precisa usar o PQAT para melhorar a exatidão do modelo quantizado.
Primeiro, defina um gerador para o dataset de calibração a partir das primeiras 1000 imagens de treinamento.
Faça a quantização do modelo e compare a exatidão com o modelo de PQAT obtido anteriormente. Observe que o modelo quantizado com ajustes alcança maior exatidão.
Conclusão
Neste tutorial, você aprendeu a criar um modelo, podá-lo usando a API de esparsidade e aplicar o treinamento consciente de quantização que preserva a esparsidade (PQAT) para preservar a esparsidade e usar o QAT. O modelo do PQAT final foi comparado ao do QAT para mostrar que a esparsidade é preservada no primeiro e perdida no último. Em seguida, os modelos foram convertidos para o TFLite, mostrando os benefícios da compressão ao usar as técnicas de pruning e PQAT em cadeia para a otimização do modelo. O modelo do TFLite foi avaliado para garantir a persistência da exatidão no back-end do TFLite. Por fim, o modelo de PQAT foi comparado a um modelo podado e quantizado com a API de quantização pós-treinamento, demonstrando a vantagem do PQAT em recuperar a perda de exatidão da quantização normal.