Mantido pelas ferramentas de ML da Arm
Este documento fornece uma visão geral sobre o clustering de peso para ajudar você a determinar como ele se adapta ao seu caso de uso.
- Para ver mais detalhes 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 únicos em um modelo, o que beneficia a implantação. Primeiro ele agrupa os pesos de cada camada em N clusters e compartilha o valor centroide do cluster para todos os pesos pertencentes ao cluster.
Essa técnica traz melhorias por meio da compactação do modelo. A compatibilidade com frameworks futuros pode reduzir o consumo de memória, fazendo uma diferença crucial para a implantação de modelos de aprendizado profundo em sistemas incorporados com recursos limitados.
Testamos o clustering em tarefas de visão e fala. Observamos melhorias de até cinco vezes na compressão do modelo com perda mínima de precisão, como demonstrado pelos resultados apresentados abaixo.
O clustering oferecerá benefícios reduzidos para convoluções e camadas densas que precedem uma camada de normalização em lote, além de uma combinação com quantização pós-treinamento por eixo.
Matriz de compatibilidade da API
Os usuários podem aplicar o clustering com as seguintes APIs:
- Criação de modelos:
tf.keras
apenas com modelos sequenciais e funcionais - Versões do TensorFlow: TF 1.x para as versões 1.14 ou mais recentes 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 compatíveis.
- Modo de execução do TensorFlow: grafo e rápido
Resultados
Classificação de imagens
Modelo | original | em cluster | ||||
---|---|---|---|---|---|---|
Acurácia de primeiro nível (%) | Tamanho do .tflite compactado (MB) | Configuração | No. de clusters | Acurácia de primeiro nível (%) | Tamanho do .tflite compactado (MB) | |
MobileNetV1 | 70,976 | 14,97 | ||||
Seletiva (as últimas três camadas do Conv2D) | 16, 16, 16 | 70,294 | 7,69 | |||
Seletiva (as últimas três camadas do Conv2D) | 32, 32, 32 | 70,69 | 8,22 | |||
Completa (todas as camadas do Conv2D) | 32 | 69,4 | 4,43 | |||
MobileNetV2 | 71,778 | 12,38 | ||||
Seletiva (as últimas três camadas do Conv2D) | 16, 16, 16 | 70,742 | 6,68 | |||
Seletiva (as últimas três camadas do Conv2D) | 32, 32, 32 | 70,926 | 7,03 | |||
Completa (todas as camadas do Conv2D) | 32 | 69,744 | 4,05 |
Os modelos foram treinados e testados no ImageNet.
Detecção de palavras-chave
Modelo | original | em cluster | ||||
---|---|---|---|---|---|---|
Acurácia de primeiro nível (%) | Tamanho do .tflite compactado (MB) | Configuração | No. de clusters | Acurácia de primeiro nível (%) | Tamanho do .tflite compactado (MB) | |
DS-CNN-L | 95,233 | 1,46 | ||||
Completa (todas as camadas do Conv2D) | 32 | 95,09 | 0,39 | |||
Completa (todas as camadas do Conv2D) | 8 | 94,272 | 0,27 |
O modelo foi treinado e testado no SpeechCommands v0.02.
- Serialize o modelo Keras em um arquivo .h5.
- Converta o arquivo .h5 em .tflite usando
TFLiteConverter.from_keras_model_file()
. - Compacte o arquivo .tflite em um arquivo ZIP.
Exemplos
Além do exemplo de clustering de peso no Keras, consulte os seguintes exemplos:
- Faça clustering dos pesos de um modelo CNN treinado no conjunto de dados de classificação MNIST de dígitos escritos à mão: código.
A implementação de clustering de peso é baseada no artigo Compactação profunda: compactação de redes neurais profundas com remoção, quantização treinada e programação de Huffman (em inglês). Consulte o capítulo 3, chamado Quantização treinada e compartilhamento de peso.