Utrzymywany przez Arm ML Tooling
Ten dokument zawiera przegląd klastrów wag, który pomoże Ci określić, jak pasuje to do Twojego przypadku użycia.
- Aby przejść od razu do kompleksowego przykładu, zobacz przykład grupowania wag .
- Aby szybko znaleźć interfejsy API potrzebne w Twoim przypadku użycia, zapoznaj się z kompleksowym przewodnikiem dotyczącym grupowania wag .
Przegląd
Klastrowanie, czyli dzielenie wag, zmniejsza liczbę unikalnych wartości wag w modelu, co prowadzi do korzyści w zakresie wdrażania. Najpierw grupuje wagi każdej warstwy w N klastrów, a następnie dzieli wartość centroidy klastra dla wszystkich wag należących do klastra.
Technika ta zapewnia ulepszenia poprzez kompresję modelu. Przyszła obsługa frameworków może odblokować ulepszenia wykorzystania pamięci, które mogą mieć decydujące znaczenie we wdrażaniu modeli głębokiego uczenia się w systemach wbudowanych z ograniczonymi zasobami.
Eksperymentowaliśmy z grupowaniem zadań związanych ze wzrokiem i mową. Zaobserwowaliśmy nawet 5-krotną poprawę kompresji modelu przy minimalnej utracie dokładności, co pokazują wyniki przedstawione poniżej.
Należy pamiętać, że grupowanie zapewni zmniejszone korzyści w przypadku splotów i gęstych warstw poprzedzających warstwę normalizacji wsadowej, a także w połączeniu z kwantyzacją na oś po treningu.
Macierz kompatybilności API
Użytkownicy mogą stosować klastrowanie za pomocą następujących interfejsów API:
- Budowanie modelu:
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 wykonania TensorFlow: zarówno wykres, jak i chętny
Wyniki
Klasyfikacja obrazu
Model | Oryginalny | Zgrupowane | ||||
---|---|---|---|---|---|---|
Dokładność na najwyższym poziomie (%) | Rozmiar skompresowanego pliku .tflite (MB) | Konfiguracja | # klastrów | Dokładność na najwyższym poziomie (%) | Rozmiar skompresowanego pliku .tflite (MB) | |
MobileNetV1 | 70,976 | 14,97 | ||||
Selektywne (ostatnie 3 warstwy Conv2D) | 16, 16, 16 | 70.294 | 7,69 | |||
Selektywne (ostatnie 3 warstwy Conv2D) | 32, 32, 32 | 70,69 | 8.22 | |||
Pełny (wszystkie warstwy Conv2D) | 32 | 69,4 | 4,43 | |||
MobileNetV2 | 71.778 | 12.38 | ||||
Selektywne (ostatnie 3 warstwy Conv2D) | 16, 16, 16 | 70.742 | 6,68 | |||
Selektywne (ostatnie 3 warstwy Conv2D) | 32, 32, 32 | 70,926 | 7.03 | |||
Pełny (wszystkie warstwy Conv2D) | 32 | 69.744 | 4.05 |
Modele zostały przeszkolone i przetestowane w ImageNet.
Wykrywanie słów kluczowych
Model | Oryginalny | Zgrupowane | ||||
---|---|---|---|---|---|---|
Dokładność na najwyższym poziomie (%) | Rozmiar skompresowanego pliku .tflite (MB) | Konfiguracja | # klastrów | Dokładność na najwyższym poziomie (%) | Rozmiar skompresowanego pliku .tflite (MB) | |
DS-CNN-L | 95.233 | 1,46 | ||||
Pełny (wszystkie warstwy Conv2D) | 32 | 95.09 | 0,39 | |||
Pełny (wszystkie warstwy Conv2D) | 8 | 94.272 | 0,27 |
Model został przeszkolony i przetestowany w programie SpeechCommands v0.02.
- Serializuj model Keras do pliku .h5
- Konwertuj plik .h5 na .tflite za pomocą
TFLiteConverter.from_keras_model_file()
- Skompresuj plik .tflite do formatu ZIP
Przykłady
Oprócz przykładu klastrowania wag w Keras zobacz następujące przykłady:
- Pogrupuj wagi modelu CNN wyszkolonego na zestawie danych klasyfikacji cyfr pisanych odręcznie MNIST: code
Implementacja grupowania wag opiera się na artykule Deep Compression: Compressing Deep Neural Networks With Pruning, Trained Quantization and Huffman Coding . Zobacz rozdział 3, zatytułowany Wytrenowana kwantyzacja i podział wagi .