Path: blob/master/site/pt-br/model_optimization/guide/combine/cqat_example.ipynb
25118 views
Copyright 2021 The TensorFlow Authors.
Exemplo do Keras de treinamento consciente de quantização que preserva os clusters (CQAT)
Visão geral
Este é um exemplo completo que mostra o uso da API de treinamento consciente de quantização que preserva os clusters (CQAT), 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 ao aplicar o clustering e verá a exatidão.
Aplicará o QAT e observará a perda de clusters.
Aplicará o CQAT e observará se o clustering aplicado antes foi preservado.
Gerará um modelo do TFLite e observará os efeitos da aplicação do CQAT nele.
Comparará a exatidão de modelo alcançada pelo CQAT 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 clustering
Avalie o modelo de referência e salve-o para usar mais tarde
Agrupe e ajuste o modelo com 8 clusters
Aplique a API cluster_weights()
para agrupar 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 uma exatidão adequada. 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 clustering.
Defina o modelo e aplique a API de clustering
O modelo precisa ser pré-treinado antes de usar a API de clustering.
Ajuste o modelo e compare a exatidão dele com a referência
Ajuste o modelo com o clustering para 3 épocas.
Defina funções helper para calcular e imprimir o número de clustering em cada kernel do modelo.
Confira se os kernels do modelo foram agrupados corretamente. Precisamos retirar o wrapper de clustering primeiro.
Nesse exemplo, há uma perda mínima na exatidão do teste após o clustering, em comparação com a referência.
Aplique o QAT e o CQAT e confira o efeito nos clusters do modelo em ambos os casos
Em seguida, vamos aplicar o QAT e o QAT que preserva os clusters (CQAT) no modelo agrupado e observar se o CQAT preserva os clusters de peso no modelo agrupado. Perceba que retiramos os wrappers de clustering do modelo com tfmot.clustering.keras.strip_clustering
antes de aplicar a API de CQAT.
Veja os benefícios da compressão do modelo de CQAT
Defina a função helper para obter um arquivo de modelo compactado.
Esse é um modelo pequeno. A aplicação do clustering e do CQAT 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 clustering 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 CQAT
Em seguida, vamos usar a quantização pós-treinamento (sem ajustes) no modelo agrupado e verificar a exatidão em relação ao modelo de CQAT. Isso demonstra por que você precisa usar o CQAT para melhorar a exatidão do modelo quantizado. A diferença pode não ser muito visível, porque o modelo de MNIST é bastante pequeno e sobreparametrizado.
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 CQAT obtido anteriormente. Observe que o modelo quantizado com ajustes alcança maior exatidão.
Conclusão
Neste tutorial, você aprendeu a criar um modelo, agrupá-lo usando a API cluster_weights()
e aplicar o treinamento consciente de quantização que preserva os clusters (CQAT) para preservar os clusters e usar o QAT. O modelo do CQAT final foi comparado ao do QAT para mostrar que os clusters são preservados no primeiro e perdidos no último. Em seguida, os modelos foram convertidos para o TFLite, mostrando os benefícios da compressão ao usar as técnicas de clustering e CQAT 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 CQAT foi comparado a um modelo agrupado e quantizado com a API de quantização pós-treinamento, demonstrando demonstrar a vantagem do CQAT em recuperar a perda de exatidão da quantização normal.