Path: blob/master/site/pt-br/model_optimization/guide/pruning/comprehensive_guide.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
Guia completo de pruning
Bem-vindo ao guia completo sobre pruning de peso do Keras.
Esta página documenta vários casos de uso e mostra como usar a API para cada um. Depois de saber quais APIs são necessárias, encontre os parâmetros e os detalhes de nível inferior na documentação da API.
Se quiser ver os benefícios do pruning e saber o que é compatível, confira a visão geral.
Para um único exemplo completo, veja o exemplo de pruning.
São abordados os seguintes casos de uso:
Defina e treine um modelo após o pruning.
Sequencial e funcional.
Model.fit do Keras e loops de treinamento personalizados.
Faça o checkpoint e desserialize um modelo podado.
Implante um modelo podado e veja os benefícios da compressão.
Para a configuração do algoritmo de pruning, consulte a documentação da API tfmot.sparsity.keras.prune_low_magnitude
.
Configuração
Para encontrar as APIs de que você precisa e para fins de compreensão, você pode executar mas pular a leitura desta seção.
Defina o modelo
Faça o pruning do modelo inteiro (sequencial e funcional)
Dicas para melhor exatidão do modelo:
Tente "podar algumas camadas" para pular o pruning das camadas que mais reduzem a exatidão.
Geralmente, é melhor fazer ajustes com o pruning, em vez de treinar do zero.
Para fazer o modelo inteiro treinar com o pruning, aplique tfmot.sparsity.keras.prune_low_magnitude
a ele.
Faça o pruning de algumas camadas (sequencial e funcional)
O pruning de um modelo pode ter um efeito negativo na exatidão. Você pode fazer o pruning de camadas selecionadas de um modelo para explorar o trade-off entre exatidão, velocidade e tamanho do modelo.
Dicas para melhor exatidão do modelo:
Geralmente, é melhor fazer ajustes com o pruning, em vez de treinar do zero.
Tente fazer o pruning das camadas finais, em vez das iniciais.
Evite o pruning de camadas críticas (por exemplo, mecanismo de atenção).
Mais:
A documentação da API
tfmot.sparsity.keras.prune_low_magnitude
fornece detalhes sobre como variar a configuração do pruning por camada.
No exemplo abaixo, faça o pruning apenas das camadas Dense
.
Enquanto esse exemplo usa o tipo de camada para decidir o que podar, a maneira mais fácil de fazer o pruning de uma camada específica é definir sua propriedade name
e procurar esse nome na clone_function
.
Exatidão do modelo mais legível, mas possivelmente mais baixa
Os ajustes com o pruning não são compatíveis. Por isso, pode apresentar menos exatidão do que os exemplos acima, que oferecem suporte aos ajustes.
Enquanto prune_low_magnitude
pode ser aplicado ao definir o modelo inicial, o carregamento de pesos posterior não funciona nos exemplos abaixo.
Exemplo funcional
Exemplo sequencial
Faça o pruning da camada do Keras personalizada ou modifique partes da camada para podar
Erro comum: o pruning do bias geralmente prejudica muito a exatidão do modelo.
tfmot.sparsity.keras.PrunableLayer
atende dois casos de uso:
Fazer o pruning de uma camada do Keras personalizada
Modificar partes de uma camada do Keras integrada para fazer o pruning.
Por exemplo, o padrão da API é só fazer o pruning do kernel da camada Dense
. O exemplo abaixo também faz o pruning do bias.
Treine o modelo
Model.fit
Chame a callback tfmot.sparsity.keras.UpdatePruningStep
durante o treinamento.
Para ajudar a depurar o treinamento, use a callback tfmot.sparsity.keras.PruningSummaries
.
Para usuários fora do Colab, é possível ver os resultados de uma execução anterior desse bloco de código no TensorBoard.dev.
Loop de treinamento personalizado
Chame a callback tfmot.sparsity.keras.UpdatePruningStep
durante o treinamento.
Para ajudar a depurar o treinamento, use a callback tfmot.sparsity.keras.PruningSummaries
.
Para usuários fora do Colab, é possível ver os resultados de uma execução anterior desse bloco de código no TensorBoard.dev.
Melhore a exatidão do modelo após o pruning
Primeiro, confira a documentação da API tfmot.sparsity.keras.prune_low_magnitude
para entender o que é um cronograma de pruning e a matemática de cada tipo de cronograma de pruning.
Dicas:
Não tenha uma taxa de aprendizado muito alta ou muito baixa durante o pruning do modelo. Considere o cronograma de pruning como um hiperparâmetro.
Como teste rápido, experimente com o pruning de um modelo para a esparsidade final no início do treinamento ao definir
begin_step
como 0 com um cronogramatfmot.sparsity.keras.ConstantSparsity
. Talvez você tenha a sorte de conseguir bons resultados.Não faça o pruning com muita frequência, dando tempo para o modelo se recuperar. O cronograma de pruning oferece uma frequência padrão apropriada.
Para ideias gerais sobre como melhorar a exatidão do modelo, procure dicas para seu caso de uso em "Defina um modelo".
Faça o checkpoint e desserialize
Você precisa preservar a etapa do otimizador durante o checkpoint. Isso significa que, embora você possa usar os modelos HDF5 do Keras para o checkpoint, não é possível usar os pesos HDF5 do Keras.
A regra acima se aplica de forma geral. O código abaixo só é necessário para o formato de modelo HDF5 (e não pesos HDF5 e outros formatos).
Implante o modelo após o pruning
Exporte o modelo com a compressão do tamanho
Erro comum: o strip_pruning
e a aplicação de um algoritmo de compressão padrão (por exemplo, por gzip) são necessários para ver os benefícios de compressão do pruning.
Otimizações de hardware específico
Depois que back-ends diferentes ativarem o pruning para melhorar a latência, o uso da esparsidade de bloco pode melhorar a latência para hardware específico.
O aumento do tamanho do bloco diminuirá o pico de esparsidade possível para uma exatidão de modelo alvo. Apesar disso, a latência ainda pode melhorar.
Para mais detalhes sobre o que é compatível com a esparsidade de bloco, veja a documentação da API tfmot.sparsity.keras.prune_low_magnitude
.