Mantido por ferramentas Arm ML
Este documento fornece uma visão geral sobre clustering de peso para ajudá-lo a determinar como ele se ajusta ao seu caso de uso.
- Para mergulhar direto em um exemplo completo, consulte o exemplo de clustering de peso .
- Para encontrar rapidamente as APIs necessárias para seu caso de uso, consulte o guia completo de clustering de peso .
Visão geral
O clustering, ou compartilhamento de peso, reduz o número de valores de peso exclusivos em um modelo, trazendo benefícios para a implantação. Ele primeiro agrupa os pesos de cada camada em N clusters e depois compartilha o valor do centróide do cluster para todos os pesos pertencentes ao cluster.
Essa técnica traz melhorias por meio da compactação do modelo. O suporte futuro à estrutura pode desbloquear melhorias no consumo de memória que podem fazer uma diferença crucial na implantação de modelos de aprendizagem profunda em sistemas embarcados com recursos limitados.
Experimentamos agrupar tarefas de visão e fala. Vimos melhorias de até 5x na compactação do modelo com perda mínima de precisão, conforme demonstrado pelos resultados apresentados abaixo.
Observe que o clustering fornecerá benefícios reduzidos para convolução e camadas densas que precedem uma camada de normalização em lote, bem como em combinação com quantização pós-treinamento por eixo.
Matriz de compatibilidade de API
Os usuários podem aplicar clustering com as seguintes APIs:
- Construção de modelo:
keras
apenas com modelos sequenciais e funcionais - Versões do TensorFlow: TF 1.x para versões 1.14+ e 2.x.
-
tf.compat.v1
com um pacote TF 2.X etf.compat.v2
com um pacote TF 1.X não são suportados.
-
- Modo de execução do TensorFlow: gráfico e ansioso
Resultados
Classificação de imagens
Modelo | Original | Agrupado | ||||
---|---|---|---|---|---|---|
Precisão principal (%) | Tamanho do .tflite compactado (MB) | Configuração | Nº de clusters | Precisão principal (%) | Tamanho do .tflite compactado (MB) | |
MobileNetV1 | 70.976 | 14,97 | ||||
Seletivo (últimas 3 camadas Conv2D) | 16, 16, 16 | 70.294 | 7,69 | |||
Seletivo (últimas 3 camadas Conv2D) | 32, 32, 32 | 70,69 | 8.22 | |||
Completo (todas as camadas Conv2D) | 32 | 69,4 | 4,43 | |||
MobileNetV2 | 71.778 | 12h38 | ||||
Seletivo (últimas 3 camadas Conv2D) | 16, 16, 16 | 70.742 | 6,68 | |||
Seletivo (últimas 3 camadas Conv2D) | 32, 32, 32 | 70.926 | 7.03 | |||
Completo (todas as camadas Conv2D) | 32 | 69.744 | 4.05 |
Os modelos foram treinados e testados no ImageNet.
Localização de palavras-chave
Modelo | Original | Agrupado | ||||
---|---|---|---|---|---|---|
Precisão principal (%) | Tamanho do .tflite compactado (MB) | Configuração | Nº de clusters | Precisão principal (%) | Tamanho do .tflite compactado (MB) | |
DS-CNN-L | 95.233 | 1,46 | ||||
Completo (todas as camadas Conv2D) | 32 | 95.09 | 0,39 | |||
Completo (todas as camadas Conv2D) | 8 | 94.272 | 0,27 |
O modelo foi treinado e testado no SpeechCommands v0.02.
- Serialize o modelo Keras em arquivo .h5
- Converta o arquivo .h5 em .tflite usando
TFLiteConverter.from_keras_model_file()
- Compacte o arquivo .tflite em um zip
Exemplos
Além do exemplo de clustering de peso em Keras , consulte os exemplos a seguir:
- Agrupe os pesos de um modelo CNN treinado no conjunto de dados de classificação de dígitos manuscritos MNIST: código
A implementação do agrupamento de peso é baseada no artigo Deep Compression: Compressioning Deep Neural Networks With Pruning, Trained Quantization and Huffman Coding . Consulte o capítulo 3, intitulado Quantização treinada e compartilhamento de peso .