ดูแลโดย Arm ML Tooling
เอกสารนี้ให้ภาพรวมเกี่ยวกับการจัดกลุ่มน้ำหนักเพื่อช่วยให้คุณพิจารณาว่าเหมาะสมกับกรณีการใช้งานของคุณอย่างไร
- หากต้องการเจาะลึกลงไปในตัวอย่างแบบ end-to-end โปรดดู ตัวอย่างการจัดกลุ่มน้ำหนัก
- หากต้องการค้นหา API ที่คุณต้องการสำหรับกรณีการใช้งานของคุณอย่างรวดเร็วโปรดดูคู่มือการ จัดกลุ่มน้ำหนักที่ครอบคลุม
ภาพรวม
การทำคลัสเตอร์หรือการแบ่งน้ำหนักช่วยลดจำนวนค่าน้ำหนักที่ไม่ซ้ำกันในแบบจำลองซึ่งนำไปสู่ประโยชน์สำหรับการปรับใช้ ขั้นแรกจะจัดกลุ่มน้ำหนักของแต่ละเลเยอร์เป็นคลัสเตอร์ N จากนั้นแชร์ค่าเซนทรอยด์ของคลัสเตอร์สำหรับน้ำหนักทั้งหมดที่เป็นของคลัสเตอร์
เทคนิคนี้นำมาปรับปรุงผ่านการบีบอัดโมเดล การสนับสนุนเฟรมเวิร์กในอนาคตสามารถปลดล็อกการปรับปรุงรอยเท้าหน่วยความจำที่สามารถสร้างความแตกต่างที่สำคัญสำหรับการปรับใช้โมเดลการเรียนรู้เชิงลึกบนระบบฝังตัวที่มีทรัพยากร จำกัด
เราได้ทดลองกับการจัดกลุ่มในงานด้านการมองเห็นและการพูด เราได้เห็นการปรับปรุงการบีบอัดโมเดลมากขึ้นถึง 5 เท่าโดยสูญเสียความแม่นยำน้อยที่สุดดังแสดงใน ผลลัพธ์ที่ แสดงด้านล่าง
โปรดทราบว่าการจัดกลุ่มจะให้ประโยชน์ที่ลดลงสำหรับ Convolution และเลเยอร์ที่หนาแน่นซึ่งนำหน้าเลเยอร์การทำให้เป็นมาตรฐานแบบกลุ่มรวมถึงการใช้ร่วมกับการหาปริมาณหลังการฝึกอบรมต่อแกน
เมทริกซ์ความเข้ากันได้ของ API
ผู้ใช้สามารถใช้การทำคลัสเตอร์ด้วย API ต่อไปนี้:
- การสร้างโมเดล:
tf.keras
มีเฉพาะโมเดลตามลำดับและฟังก์ชันเท่านั้น - เวอร์ชัน TensorFlow: TF 1.x สำหรับเวอร์ชัน 1.14+ และ 2.x
-
tf.compat.v1
มีแพ็กเกจ TFtf.compat.v2
และtf.compat.v2
มีแพ็กเกจ TF 1.X ไม่ได้รับการสนับสนุน
-
- โหมดการดำเนินการ TensorFlow: ทั้งกราฟและความกระตือรือร้น
ผล
การจำแนกภาพ
รุ่น | ต้นฉบับ | คลัสเตอร์ | ||||
---|---|---|---|---|---|---|
ความแม่นยำอันดับ 1 (%) | ขนาดของไฟล์บีบอัด. tflite (MB) | การกำหนดค่า | # ของคลัสเตอร์ | ความแม่นยำอันดับ 1 (%) | ขนาดของไฟล์บีบอัด. tflite (MB) | |
MobileNetV1 | 70.976 | 14.97 | ||||
Selective (Conv2D 3 เลเยอร์สุดท้าย) | 16, 16, 16 | 70.294 | 7.69 | |||
Selective (Conv2D 3 เลเยอร์สุดท้าย) | 32, 32, 32 | 70.69 | 8.22 | |||
เต็ม (เลเยอร์ Conv2D ทั้งหมด) | 32 | 69.4 | 4.43 | |||
MobileNetV2 | 71.778 | 12.38 | ||||
Selective (Conv2D 3 เลเยอร์สุดท้าย) | 16, 16, 16 | 70.742 | 6.68 | |||
Selective (Conv2D 3 เลเยอร์สุดท้าย) | 32, 32, 32 | 70.926 | 7.03 | |||
เต็ม (เลเยอร์ Conv2D ทั้งหมด) | 32 | 69.744 | 4.05 |
แบบจำลองได้รับการฝึกฝนและทดสอบบน ImageNet
การจำคำหลัก
รุ่น | ต้นฉบับ | คลัสเตอร์ | ||||
---|---|---|---|---|---|---|
ความแม่นยำอันดับ 1 (%) | ขนาดของไฟล์บีบอัด. tflite (MB) | การกำหนดค่า | # ของคลัสเตอร์ | ความแม่นยำอันดับ 1 (%) | ขนาดของไฟล์บีบอัด. tflite (MB) | |
DS-CNN-L | 95.233 | 1.46 | ||||
เต็ม (เลเยอร์ Conv2D ทั้งหมด) | 32 | 95.09 | 0.39 | |||
เต็ม (เลเยอร์ Conv2D ทั้งหมด) | 8 | 94.272 | 0.27 |
แบบจำลองได้รับการฝึกฝนและทดสอบเกี่ยวกับ SpeechCommands v0.02
- ทำให้โมเดล Keras เป็นไฟล์. h5
- แปลงไฟล์. h5 เป็น. tflite โดยใช้
TFLiteConverter.from_keras_model_file()
- บีบอัดไฟล์. tflite เป็น zip
ตัวอย่าง
นอกเหนือจากตัวอย่างการทำ คลัสเตอร์ Weight ใน Keras แล้วโปรดดูตัวอย่างต่อไปนี้:
- จัดกลุ่มน้ำหนักของแบบจำลอง CNN ที่ได้รับการฝึกฝนบนชุดข้อมูลการจำแนกตัวเลขหลักที่เขียนด้วยลายมือของ MNIST: รหัส
การใช้งานการจัดกลุ่มน้ำหนักจะขึ้นอยู่กับ Deep Compression: การบีบอัด Deep Neural Networks ด้วยการตัดแต่งกิ่ง, กระดาษ Quantization ที่ผ่านการฝึกอบรมและ Huffman Coding ดูบทที่ 3 ชื่อเรื่อง การหาปริมาณและการแบ่งน้ำหนักที่ได้รับการฝึกอบรม