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.
Serializza il modello Keras nel file .h5
Converti il file .h5 in .tflite utilizzando TFLiteConverter.from_keras_model_file()
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 documentoDeep Compression: Compressing Deep Neural Networks With Pruning, Trained Quantization e Huffman Coding . Vedere il capitolo 3, intitolato Quantizzazione addestrata e condivisione del peso .
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2024-02-03 UTC."],[],[],null,["# Weight clustering\n\n\u003cbr /\u003e\n\n~Maintained by Arm ML Tooling~\n\nThis document provides an overview on weight clustering to help you determine how it fits with your use case.\n\n- To dive right into an end-to-end example, see the [weight clustering example](/model_optimization/guide/clustering/clustering_example).\n- To quickly find the APIs you need for your use case, see the [weight clustering comprehensive guide](/model_optimization/guide/clustering/clustering_comprehensive_guide).\n\nOverview\n--------\n\nClustering, or weight sharing, reduces the number of unique weight values in a model, leading to benefits for deployment. It first groups the weights of each layer into *N* clusters, then shares the cluster's centroid value for all the weights belonging to the cluster.\n\nThis technique brings improvements via model compression. Future framework support can unlock memory footprint improvements that can make a crucial difference for deploying deep learning models on embedded systems with limited resources.\n\nWe have experimented with clustering across vision and speech tasks. We've seen up to 5x improvements in model compression with minimal loss of accuracy, as demonstrated by the [results](#results) presented below.\n\nPlease note that clustering will provide reduced benefits for convolution and dense layers that precede a batch normalization layer, as well as in combination with per-axis post-training quantization.\n\n### API compatibility matrix\n\nUsers can apply clustering with the following APIs:\n\n- Model building: `keras` with only Sequential and Functional models\n- TensorFlow versions: TF 1.x for versions 1.14+ and 2.x.\n - [`tf.compat.v1`](https://www.tensorflow.org/api_docs/python/tf/compat/v1) with a TF 2.X package and `tf.compat.v2` with a TF 1.X package are not supported.\n- TensorFlow execution mode: both graph and eager\n\nResults\n-------\n\n### Image classification\n\n| Model | Original || Clustered ||||\n| Model | Top-1 accuracy (%) | Size of compressed .tflite (MB) | Configuration | # of clusters | Top-1 accuracy (%) | Size of compressed .tflite (MB) |\n|-------------|--------------------|---------------------------------|----------------------------------|---------------|--------------------|---------------------------------|\n| MobileNetV1 | 70.976 | 14.97 |\n| MobileNetV1 | 70.976 | 14.97 | Selective (last 3 Conv2D layers) | 16, 16, 16 | 70.294 | 7.69 |\n| MobileNetV1 | 70.976 | 14.97 | Selective (last 3 Conv2D layers) | 32, 32, 32 | 70.69 | 8.22 |\n| MobileNetV1 | 70.976 | 14.97 | Full (all Conv2D layers) | 32 | 69.4 | 4.43 |\n| MobileNetV2 | 71.778 | 12.38 |\n| MobileNetV2 | 71.778 | 12.38 | Selective (last 3 Conv2D layers) | 16, 16, 16 | 70.742 | 6.68 |\n| MobileNetV2 | 71.778 | 12.38 | Selective (last 3 Conv2D layers) | 32, 32, 32 | 70.926 | 7.03 |\n| MobileNetV2 | 71.778 | 12.38 | Full (all Conv2D layers) | 32 | 69.744 | 4.05 |\n\nThe models were trained and tested on ImageNet.\n\n### Keyword spotting\n\n| Model | Original || Clustered ||||\n| Model | Top-1 accuracy (%) | Size of compressed .tflite (MB) | Configuration | # of clusters | Top-1 accuracy (%) | Size of compressed .tflite (MB) |\n|----------|--------------------|---------------------------------|--------------------------|---------------|--------------------|---------------------------------|\n| DS-CNN-L | 95.233 | 1.46 |\n| DS-CNN-L | 95.233 | 1.46 | Full (all Conv2D layers) | 32 | 95.09 | 0.39 |\n| DS-CNN-L | 95.233 | 1.46 | Full (all Conv2D layers) | 8 | 94.272 | 0.27 |\n\nThe model was trained and tested on SpeechCommands v0.02.\n| **Note:** *Size of compressed .tflite* refers to the size of the zipped .tflite file obtained from the model from the following process:\n\n1. Serialize the Keras model into .h5 file\n2. Convert the .h5 file into .tflite using `TFLiteConverter.from_keras_model_file()`\n3. Compress the .tflite file into a zip\n\nExamples\n--------\n\nIn addition to the\n[Weight clustering in Keras example](/model_optimization/guide/clustering/clustering_example), see the\nfollowing examples:\n\n- Cluster the weights of a CNN model trained on the MNIST handwritten digit classification dataset: [code](https://github.com/tensorflow/model-optimization/blob/master/tensorflow_model_optimization/python/examples/clustering/keras/mnist/mnist_cnn.py)\n\nThe weight clustering implementation is based on the *Deep Compression:\nCompressing Deep Neural Networks With Pruning, Trained Quantization and Huffman\nCoding* [paper](https://arxiv.org/abs/1510.00149). See chapter 3, titled\n*Trained Quantization and Weight Sharing*."]]