Raggruppamento del peso

Gestito da Arm ML Tooling

Questo documento fornisce una panoramica sul clustering del peso per aiutarti a determinare come si adatta al tuo caso d'uso.

Panoramica

Il clustering o la condivisione del peso riduce il numero di valori di peso univoci in un modello, con conseguenti vantaggi per la distribuzione. Innanzitutto raggruppa i pesi di ogni strato in N cluster, quindi condivide il valore del baricentro del cluster per tutti i pesi appartenenti al cluster.

Questa tecnica apporta miglioramenti tramite la compressione del modello. Il futuro supporto del framework può sbloccare miglioramenti dell’impronta di memoria che possono fare una differenza cruciale per l’implementazione di modelli di deep learning su sistemi embedded con risorse limitate.

Abbiamo sperimentato il clustering tra compiti visivi e vocali. Abbiamo riscontrato miglioramenti fino a 5 volte nella compressione del modello con una perdita minima di precisione, come dimostrato dai risultati presentati di seguito.

Tieni presente che il clustering fornirà vantaggi ridotti per la convoluzione e gli strati densi che precedono uno strato di normalizzazione batch, nonché in combinazione con la quantizzazione post-addestramento per asse.

Matrice di compatibilità API

Gli utenti possono applicare il clustering con le seguenti API:

  • Modellismo: keras con i soli modelli Sequenziale e Funzionale
  • Versioni TensorFlow: TF 1.x per le versioni 1.14+ e 2.x.
    • tf.compat.v1 con un pacchetto TF 2.X e tf.compat.v2 con un pacchetto TF 1.X non sono supportati.
  • Modalità di esecuzione di TensorFlow: sia grafica che entusiasta

Risultati

Classificazione delle immagini

Modello Originale Raggruppato
Precisione massima 1 (%) Dimensione del file .tflite compresso (MB) Configurazione N. di cluster Precisione massima 1 (%) Dimensione del file .tflite compresso (MB)
MobileNetV1 70.976 14.97
Selettivo (ultimi 3 livelli Conv2D) 16, 16, 16 70.294 7.69
Selettivo (ultimi 3 livelli Conv2D) 32, 32, 32 70,69 8.22
Completo (tutti i livelli Conv2D) 32 69.4 4.43
MobileNetV2 71.778 12.38
Selettivo (ultimi 3 livelli Conv2D) 16, 16, 16 70.742 6.68
Selettivo (ultimi 3 livelli Conv2D) 32, 32, 32 70.926 7.03
Completo (tutti i livelli Conv2D) 32 69.744 4.05

I modelli sono stati addestrati e testati su ImageNet.

Individuazione delle parole chiave

Modello Originale Raggruppato
Precisione massima 1 (%) Dimensione del file .tflite compresso (MB) Configurazione N. di cluster Precisione massima 1 (%) Dimensione del file .tflite compresso (MB)
DS-CNN-L 95.233 1.46
Completo (tutti i livelli Conv2D) 32 95.09 0,39
Completo (tutti i livelli Conv2D) 8 94.272 0,27

Il modello è stato addestrato e testato su SpeechCommands v0.02.

  1. Serializza il modello Keras nel file .h5
  2. Converti il ​​file .h5 in .tflite utilizzando TFLiteConverter.from_keras_model_file()
  3. Comprimi il file .tflite in uno zip

Esempi

Oltre all'esempio Clustering del peso in Keras , vedere i seguenti esempi:

  • Raggruppare i pesi di un modello CNN addestrato sul set di dati di classificazione delle cifre scritte a mano MNIST: codice

L'implementazione del clustering del peso si basa sul documento Deep Compression: Compressing Deep Neural Networks With Pruning, Trained Quantization e Huffman Coding . Vedere il capitolo 3, intitolato Quantizzazione addestrata e condivisione del peso .