Google I/O to frajda! Nadrobić zaległości w sesjach TensorFlow Zobacz sesje

Grupowanie wag

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.

Przegląd

Klastrowanie lub współdzielenie wagi zmniejsza liczbę unikalnych wartości wagi w modelu, co prowadzi do korzyści z wdrożenia. Najpierw grupuje wagi każdej warstwy w klastry N , a następnie udostępnia wartość środka ciężkości klastra dla wszystkich wag należących do klastra.

Ta technika przynosi ulepszenia poprzez kompresję modelu. Przyszłe wsparcie ram może odblokować ulepszenia dotyczące zużycia pamięci, które mogą mieć kluczowe znaczenie dla wdrażania modeli głębokiego uczenia się w systemach wbudowanych z ograniczonymi zasobami.

Eksperymentowaliśmy z grupowaniem zadań związanych z widzeniem i mową. Widzieliśmy nawet pięciokrotną poprawę kompresji modelu przy minimalnej utracie dokładności, jak pokazują wyniki przedstawione poniżej.

Należy pamiętać, że grupowanie zapewni mniejsze korzyści dla warstw splotu i gęstych warstw, które poprzedzają warstwę normalizacji wsadowej, a także w połączeniu z kwantyzacją na osi po treningu.

Macierz zgodności API

Użytkownicy mogą stosować klastrowanie za pomocą następujących interfejsów API:

  • Budowanie modeli: tf.keras tylko z tf.keras sekwencyjnymi i funkcjonalnymi
  • Wersje TensorFlow: TF 1.x dla wersji 1.14+ i 2.x.
    • tf.compat.v1 z pakietem TF 2.X i tf.compat.v2 z pakietem TF 1.X nie są obsługiwane.
  • Tryb wykonywania TensorFlow: zarówno wykres, jak i eager

Wyniki

Klasyfikacja obrazu

Model Oryginał Zgrupowane
Najwyższa dokładność (%) Rozmiar skompresowanego pliku .tflite (MB) Konfiguracja Liczba klastrów Najwyższa dokładność (%) 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łna (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łna (wszystkie warstwy Conv2D) 32 69,744 4.05

Modele zostały przeszkolone i przetestowane w ImageNet.

Wykrywanie słów kluczowych

Model Oryginał Zgrupowane
Najwyższa dokładność (%) Rozmiar skompresowanego pliku .tflite (MB) Konfiguracja Liczba klastrów Najwyższa dokładność (%) 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.

  1. Serializuj model Keras do pliku .h5
  2. Przekonwertuj plik .h5 na .tflite za pomocą TFLiteConverter.from_keras_model_file()
  3. Skompresuj plik .tflite do pliku ZIP

Przykłady

Oprócz grupowania wag w przykładzie Keras zobacz następujące przykłady:

  • Skup wagi modelu CNN wyszkolonego na zbiorze danych klasyfikacji odręcznych cyfr MNIST: kod

Implementacja grupowania wag jest oparta na dokumencie Deep Compression: Compressing Deep Neural Networks With Pruning, Trained Quantization i Huffman Coding . Patrz rozdział 3, zatytułowany Trained Quantization and Weight Sharing .