Dikelola oleh Arm ML Tooling
Dokumen ini memberikan gambaran umum tentang pengelompokan bobot untuk membantu Anda menentukan kesesuaiannya dengan kasus penggunaan Anda.
- Untuk mendalami contoh end-to-end, lihat contoh pengelompokan bobot .
- Untuk menemukan API yang Anda perlukan untuk kasus penggunaan Anda dengan cepat, lihat panduan komprehensif pengelompokan bobot .
Ringkasan
Pengelompokan, atau pembagian bobot, mengurangi jumlah nilai bobot unik dalam model, sehingga memberikan manfaat untuk penerapan. Pertama-tama ia mengelompokkan bobot setiap lapisan ke dalam N cluster, kemudian membagikan nilai pusat massa cluster untuk semua bobot yang dimiliki cluster tersebut.
Teknik ini membawa peningkatan melalui kompresi model. Dukungan kerangka kerja di masa depan dapat membuka peningkatan jejak memori yang dapat membuat perbedaan penting dalam penerapan model pembelajaran mendalam pada sistem tertanam dengan sumber daya terbatas.
Kami telah bereksperimen dengan pengelompokan tugas penglihatan dan ucapan. Kami telah melihat peningkatan hingga 5x dalam kompresi model dengan kehilangan akurasi yang minimal, seperti yang ditunjukkan oleh hasil yang disajikan di bawah.
Harap perhatikan bahwa pengelompokan akan mengurangi manfaat untuk konvolusi dan lapisan padat yang mendahului lapisan normalisasi batch, serta dalam kombinasi dengan kuantisasi pasca-pelatihan per sumbu.
Matriks kompatibilitas API
Pengguna dapat menerapkan pengelompokan dengan API berikut:
- Pembuatan model:
keras
hanya dengan model Sekuensial dan Fungsional - Versi TensorFlow: TF 1.x untuk versi 1.14+ dan 2.x.
-
tf.compat.v1
dengan paket TF 2.X dantf.compat.v2
dengan paket TF 1.X tidak didukung.
-
- Mode eksekusi TensorFlow: grafik dan bersemangat
Hasil
Klasifikasi gambar
Model | Asli | Berkelompok | ||||
---|---|---|---|---|---|---|
Akurasi 1 teratas (%) | Ukuran terkompresi .tflite (MB) | Konfigurasi | # cluster | Akurasi 1 teratas (%) | Ukuran terkompresi .tflite (MB) | |
MobileNetV1 | 70.976 | 14.97 | ||||
Selektif (3 lapisan Konv2D terakhir) | 16, 16, 16 | 70.294 | 7.69 | |||
Selektif (3 lapisan Konv2D terakhir) | 32, 32, 32 | 70.69 | 8.22 | |||
Penuh (semua lapisan Conv2D) | 32 | 69.4 | 4.43 | |||
MobileNetV2 | 71.778 | 12.38 | ||||
Selektif (3 lapisan Konv2D terakhir) | 16, 16, 16 | 70.742 | 6.68 | |||
Selektif (3 lapisan Konv2D terakhir) | 32, 32, 32 | 70.926 | 7.03 | |||
Penuh (semua lapisan Conv2D) | 32 | 69.744 | 4.05 |
Model dilatih dan diuji di ImageNet.
Pencarian kata kunci
Model | Asli | Berkelompok | ||||
---|---|---|---|---|---|---|
Akurasi 1 teratas (%) | Ukuran terkompresi .tflite (MB) | Konfigurasi | # cluster | Akurasi 1 teratas (%) | Ukuran terkompresi .tflite (MB) | |
DS-CNN-L | 95.233 | 1.46 | ||||
Penuh (semua lapisan Conv2D) | 32 | 95.09 | 0,39 | |||
Penuh (semua lapisan Conv2D) | 8 | 94.272 | 0,27 |
Model dilatih dan diuji pada SpeechCommands v0.02.
- Buat serial model Keras menjadi file .h5
- Ubah file .h5 menjadi .tflite menggunakan
TFLiteConverter.from_keras_model_file()
- Kompres file .tflite menjadi zip
Contoh
Selain contoh Weight clustering in Keras , lihat contoh berikut:
- Kelompokkan bobot model CNN yang dilatih pada kumpulan data klasifikasi digit tulisan tangan MNIST: kode
Implementasi pengelompokan bobot didasarkan pada makalah Deep Compression: Compressing Deep Neural Networks With Pruning, Trained Quantization, dan Huffman Coding . Lihat bab 3 berjudul Kuantisasi Terlatih dan Pembagian Bobot .