Google I / O kehrt vom 18. bis 20. Mai zurück! Reservieren Sie Platz und erstellen Sie Ihren Zeitplan Registrieren Sie sich jetzt

Gewichtsclustering

Wird von Arm ML Tooling gewartet

Dieses Dokument bietet einen Überblick über Gewichtsclustering, damit Sie feststellen können, wie es zu Ihrem Anwendungsfall passt.

Überblick

Durch Clustering oder Gewichtsverteilung wird die Anzahl der eindeutigen Gewichtswerte in einem Modell reduziert, was zu Vorteilen für die Bereitstellung führt. Es gruppiert zuerst die Gewichte jeder Schicht in N Cluster und teilt dann den Schwerpunktwert des Clusters für alle zum Cluster gehörenden Gewichte.

Diese Technik bringt Verbesserungen durch Modellkomprimierung. Zukünftige Framework-Unterstützung kann Verbesserungen des Speicherbedarfs freischalten, die einen entscheidenden Unterschied für die Bereitstellung von Deep-Learning-Modellen auf eingebetteten Systemen mit begrenzten Ressourcen ausmachen können.

Wir haben mit Clustering über Seh- und Sprachaufgaben experimentiert. Wir haben bis zu 5-fache Verbesserungen bei der Modellkomprimierung bei minimalem Genauigkeitsverlust festgestellt, wie die unten dargestellten Ergebnisse zeigen .

Bitte beachten Sie, dass das Clustering weniger Vorteile für Faltungsschichten und dichte Schichten bietet, die einer Batch-Normalisierungsschicht vorausgehen, sowie in Kombination mit der Quantisierung nach dem Training pro Achse.

API-Kompatibilitätsmatrix

Benutzer können Clustering mit den folgenden APIs anwenden:

  • tf.keras : tf.keras mit nur sequentiellen und funktionalen Modellen
  • TensorFlow-Versionen: TF 1.x für die Versionen 1.14+ und 2.x.
    • tf.compat.v1 mit einem TF 2.X-Paket und tf.compat.v2 mit einem TF 1.X-Paket werden nicht unterstützt.
  • TensorFlow-Ausführungsmodus: sowohl grafisch als auch eifrig

Ergebnisse

Bildklassifizierung

Modell Original Clustered
Top-1-Genauigkeit (%) Größe des komprimierten .tflite (MB) Aufbau Anzahl der Cluster Top-1-Genauigkeit (%) Größe des komprimierten .tflite (MB)
MobileNetV1 70,976 14.97
Selektiv (letzte 3 Conv2D-Schichten) 16, 16, 16 70,294 7.69
Selektiv (letzte 3 Conv2D-Schichten) 32, 32, 32 70,69 8.22
Voll (alle Conv2D-Ebenen) 32 69.4 4.43
MobileNetV2 71,778 12.38
Selektiv (letzte 3 Conv2D-Schichten) 16, 16, 16 70.742 6.68
Selektiv (letzte 3 Conv2D-Schichten) 32, 32, 32 70,926 7.03
Voll (alle Conv2D-Ebenen) 32 69.744 4.05

Die Modelle wurden auf ImageNet trainiert und getestet.

Keyword-Erkennung

Modell Original Clustered
Top-1-Genauigkeit (%) Größe des komprimierten .tflite (MB) Aufbau Anzahl der Cluster Top-1-Genauigkeit (%) Größe des komprimierten .tflite (MB)
DS-CNN-L 95,233 1,46
Voll (alle Conv2D-Ebenen) 32 95.09 0,39
Voll (alle Conv2D-Ebenen) 8 94,272 0,27

Das Modell wurde mit SpeechCommands v0.02 trainiert und getestet.

  1. Serialisieren Sie das Keras-Modell in eine .h5-Datei
  2. Konvertieren Sie die .h5-Datei mit TFLiteConverter.from_keras_model_file() in .tflite.
  3. Komprimieren Sie die .tflite-Datei in eine Zip-Datei

Beispiele

Weitere Beispiele finden Sie neben dem Beispiel für Gewichtsclustering in Keras in den folgenden Beispielen:

  • Gruppieren Sie die Gewichte eines CNN-Modells, das auf dem handgeschriebenen MNIST-Datensatz zur Klassifizierung von Ziffern trainiert wurde: Code

Das Gewicht Clustering - Implementierung basiert auf der Deep Compression: Kompression Tiefen Neuronale Netze mit Baum-, Ausgebildete Quantisierung und Huffman - Kodierung Papier . Siehe Kapitel 3 mit dem Titel Geschulte Quantisierung und Gewichtsverteilung .