Dikelola oleh Arm ML Tooling
Dokumen ini memberikan ikhtisar tentang pengelompokan bobot untuk membantu Anda menentukan kesesuaiannya dengan kasus penggunaan Anda.
- Untuk mempelajari contoh menyeluruh, lihat contoh pengelompokan bobot .
- Untuk menemukan API yang Anda butuhkan dengan cepat untuk kasus penggunaan Anda, lihat panduan komprehensif pengelompokan bobot .
Ringkasan
Pengelompokan, atau pembagian bobot, mengurangi jumlah nilai bobot unik dalam model, yang mengarah pada manfaat penerapan. Ini pertama-tama mengelompokkan bobot setiap lapisan ke dalam N cluster, kemudian membagikan nilai centroid cluster untuk semua bobot milik cluster.
Teknik ini membawa perbaikan melalui kompresi model. Dukungan kerangka kerja masa depan dapat membuka kunci peningkatan jejak memori yang dapat membuat perbedaan penting untuk menerapkan model pembelajaran mendalam pada sistem tertanam dengan sumber daya terbatas.
Kami telah bereksperimen dengan pengelompokan di seluruh tugas penglihatan dan bicara. Kami telah melihat peningkatan hingga 5x dalam kompresi model dengan kehilangan akurasi minimal, seperti yang ditunjukkan oleh hasil yang disajikan di bawah ini.
Harap dicatat bahwa pengelompokan akan memberikan pengurangan manfaat untuk konvolusi dan lapisan padat yang mendahului lapisan normalisasi batch, serta dalam kombinasi dengan kuantisasi pascapelatihan per sumbu.
Matriks kompatibilitas API
Pengguna dapat menerapkan pengelompokan dengan API berikut:
- Pembuatan model:
tf.keras
hanya dengan model Sequential dan Functional - 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 | berkerumun | ||||
---|---|---|---|---|---|---|
Akurasi top-1 (%) | Ukuran .tflite (MB) terkompresi | Konfigurasi | # dari cluster | Akurasi top-1 (%) | Ukuran .tflite (MB) terkompresi | |
MobileNetV1 | 70,976 | 14.97 | ||||
Selektif (3 lapisan Conv2D terakhir) | 16, 16, 16 | 70.294 | 7.69 | |||
Selektif (3 lapisan Conv2D 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 Conv2D terakhir) | 16, 16, 16 | 70,742 | 6.68 | |||
Selektif (3 lapisan Conv2D terakhir) | 32, 32, 32 | 70.926 | 7.03 | |||
Penuh (semua lapisan Conv2D) | 32 | 69.744 | 4.05 |
Model dilatih dan diuji di ImageNet.
Bercak kata kunci
Model | Asli | berkerumun | ||||
---|---|---|---|---|---|---|
Akurasi top-1 (%) | Ukuran .tflite (MB) terkompresi | Konfigurasi | # dari cluster | Akurasi top-1 (%) | Ukuran .tflite (MB) terkompresi | |
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 Kompresi Dalam: Mengompresi Jaringan Syaraf Dalam Dengan Kertas Pemangkasan, Kuantisasi Terlatih, dan Pengodean Huffman . Lihat bab 3, berjudul Kuantisasi Terlatih dan Pembagian Bobot .