Utrzymywane przez Arm ML Tooling
Ten dokument zawiera omówienie grupowania wag, aby pomóc Ci określić, jak pasuje do Twojego przypadku użycia.
- Aby zagłębić się w kompletny przykład, zobacz przykład grupowania wag .
- Aby szybko znaleźć interfejsy API potrzebne do danego przypadku użycia, zapoznaj się z obszernym przewodnikiem dotyczącym grupowania według wagi .
Przegląd
Klastrowanie lub współdzielenie wag zmniejsza liczbę unikalnych wartości wag w modelu, co prowadzi do korzyści z wdrożenia. Najpierw grupuje wagi każdej warstwy w N klastrów, a następnie udostępnia wartość centroidu klastra dla wszystkich wag należących do klastra.
Ta technika wprowadza ulepszenia poprzez kompresję modelu. Przyszła obsługa platform może odblokować ulepszenia w zakresie wykorzystania pamięci, które mogą mieć decydujące znaczenie przy wdrażaniu modeli uczenia głębokiego w systemach osadzonych o ograniczonych zasobach.
Eksperymentowaliśmy z grupowaniem zadań związanych z widzeniem i mową. Zaobserwowaliśmy do 5x poprawę kompresji modelu przy minimalnej utracie dokładności, co pokazują wyniki przedstawione poniżej.
Należy pamiętać, że klastrowanie zapewnia mniejsze korzyści w przypadku splotów i gęstych warstw, które poprzedzają warstwę normalizacji wsadowej, a także w połączeniu z kwantyzacją po treningu na osi.
Macierz zgodności API
Użytkownicy mogą stosować klastrowanie za pomocą następujących interfejsów API:
- Budowa modelu:
tf.keras
tylko z modelami sekwencyjnymi i funkcjonalnymi - Wersje TensorFlow: TF 1.x dla wersji 1.14+ i 2.x.
-
tf.compat.v1
z pakietem TF 2.X itf.compat.v2
z pakietem TF 1.X nie są obsługiwane.
-
- Tryb wykonywania TensorFlow: zarówno wykres, jak i zachłanność
Wyniki
Klasyfikacja obrazu
Model | Oryginał | Zgrupowane | ||||
---|---|---|---|---|---|---|
Dokładność Top-1 (%) | Rozmiar skompresowanego pliku .tflite (MB) | Konfiguracja | liczba klastrów | Dokładność Top-1 (%) | Rozmiar skompresowanego pliku .tflite (MB) | |
MobileNetV1 | 70,976 | 14.97 | ||||
Selektywna (ostatnie 3 warstwy Conv2D) | 16, 16, 16 | 70,294 | 7,69 | |||
Selektywna (ostatnie 3 warstwy Conv2D) | 32, 32, 32 | 70,69 | 8.22 | |||
Pełna (wszystkie warstwy Conv2D) | 32 | 69,4 | 4,43 | |||
MobileNetV2 | 71.778 | 12.38 | ||||
Selektywna (ostatnie 3 warstwy Conv2D) | 16, 16, 16 | 70,742 | 6.68 | |||
Selektywna (ostatnie 3 warstwy Conv2D) | 32, 32, 32 | 70.926 | 7.03 | |||
Pełna (wszystkie warstwy Conv2D) | 32 | 69,744 | 4,05 |
Modele zostały przeszkolone i przetestowane w ImageNet.
Wyszukiwanie słów kluczowych
Model | Oryginał | Zgrupowane | ||||
---|---|---|---|---|---|---|
Dokładność Top-1 (%) | Rozmiar skompresowanego pliku .tflite (MB) | Konfiguracja | liczba klastrów | Dokładność Top-1 (%) | Rozmiar skompresowanego pliku .tflite (MB) | |
DS-CNN-L | 95,233 | 1,46 | ||||
Pełna (wszystkie warstwy Conv2D) | 32 | 95.09 | 0,39 | |||
Pełna (wszystkie warstwy Conv2D) | 8 | 94.272 | 0,27 |
Model został przeszkolony i przetestowany na SpeechCommands v0.02.
- Serializuj model Keras do pliku .h5
- Konwertuj plik .h5 na .tflite za pomocą
TFLiteConverter.from_keras_model_file()
- Skompresuj plik .tflite w archiwum zip
Przykłady
Oprócz przykładu grupowania wag w Keras zobacz następujące przykłady:
- Grupuj wagi modelu CNN wytrenowanego na podstawie odręcznego zbioru danych klasyfikacji cyfr MNIST: kod
Implementacja grupowania wag opiera się na artykule Deep Compression: Compressing Deep Neural Networks With Pruning, Trained Quantization i Huffman Coding . Zobacz rozdział 3, zatytułowany Wyszkolona kwantyzacja i współdzielenie wagi .