บำรุงรักษาโดย Arm ML Tooling
เอกสารนี้ให้ภาพรวมเกี่ยวกับการจัดกลุ่มน้ำหนักเพื่อช่วยคุณพิจารณาว่าจะเหมาะกับกรณีการใช้งานของคุณอย่างไร
- หากต้องการเจาะลึกตัวอย่างตั้งแต่ต้นจนจบ โปรดดู ตัวอย่างการจัดกลุ่มน้ำหนัก
- หากต้องการค้นหา API ที่คุณต้องการสำหรับกรณีการใช้งานของคุณอย่างรวดเร็ว โปรดดู คำแนะนำที่ครอบคลุมเกี่ยวกับการจัดกลุ่มน้ำหนัก
ภาพรวม
การจัดกลุ่มหรือการแบ่งปันน้ำหนักจะช่วยลดจำนวนค่าน้ำหนักที่ไม่ซ้ำกันในแบบจำลอง ซึ่งนำไปสู่ประโยชน์ในการใช้งาน ขั้นแรกจะจัดกลุ่มน้ำหนักของแต่ละเลเยอร์ออกเป็น N คลัสเตอร์ จากนั้นจึงแชร์ค่าเซนทรอยด์ของคลัสเตอร์สำหรับน้ำหนักทั้งหมดที่เป็นของคลัสเตอร์
เทคนิคนี้นำมาซึ่งการปรับปรุงผ่านการบีบอัดโมเดล การสนับสนุนเฟรมเวิร์กในอนาคตสามารถปลดล็อกการปรับปรุงพื้นที่หน่วยความจำที่สามารถสร้างความแตกต่างที่สำคัญสำหรับการปรับใช้โมเดลการเรียนรู้เชิงลึกบนระบบฝังตัวที่มีทรัพยากรที่จำกัด
เราได้ทดลองการจัดกลุ่มในงานการมองเห็นและการพูด เราพบว่าการบีบอัดโมเดลมีการปรับปรุงขึ้นถึง 5 เท่า โดยสูญเสียความแม่นยำน้อยที่สุด ดังที่แสดงโดย ผลลัพธ์ ที่นำเสนอด้านล่าง
โปรดทราบว่าการจัดกลุ่มจะให้ประโยชน์ที่ลดลงสำหรับชั้น Convolution และชั้นหนาแน่นที่อยู่หน้าชั้นการทำให้เป็นมาตรฐานแบบแบตช์ รวมถึงการใช้ร่วมกับการหาปริมาณหลังการฝึกต่อแกน
เมทริกซ์ความเข้ากันได้ของ API
ผู้ใช้สามารถใช้การทำคลัสเตอร์กับ API ต่อไปนี้:
- การสร้างโมเดล:
keras
ที่มีเฉพาะโมเดล Sequential และ Functional เท่านั้น - เวอร์ชัน TensorFlow: TF 1.x สำหรับเวอร์ชัน 1.14+ และ 2.x
- ไม่รองรับ
tf.compat.v1
พร้อมแพ็คเกจ TF 2.X และtf.compat.v2
พร้อมแพ็คเกจ TF 1.X
- ไม่รองรับ
- โหมดการดำเนินการ TensorFlow: ทั้งกราฟและความกระตือรือร้น
ผลลัพธ์
การจำแนกประเภทภาพ
แบบอย่าง | ต้นฉบับ | เป็นกลุ่มก้อน | ||||
---|---|---|---|---|---|---|
ความแม่นยำอันดับ 1 (%) | ขนาดของไฟล์ .tflite ที่ถูกบีบอัด (MB) | การกำหนดค่า | #ของคลัสเตอร์ | ความแม่นยำอันดับ 1 (%) | ขนาดของไฟล์ .tflite ที่ถูกบีบอัด (MB) | |
โมบายเน็ตV1 | 70.976 | 14.97 | ||||
แบบเลือก (3 เลเยอร์ Conv2D สุดท้าย) | 16, 16, 16 | 70.294 | 7.69 | |||
แบบเลือก (3 เลเยอร์ Conv2D สุดท้าย) | 32, 32, 32 | 70.69 | 8.22 | |||
เต็ม (เลเยอร์ Conv2D ทั้งหมด) | 32 | 69.4 | 4.43 | |||
โมบายเน็ทV2 | 71.778 | 12.38 | ||||
แบบเลือก (3 เลเยอร์ Conv2D สุดท้าย) | 16, 16, 16 | 70.742 | 6.68 | |||
แบบเลือก (3 เลเยอร์ Conv2D สุดท้าย) | 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
ตัวอย่าง
นอกจาก การจัดกลุ่มน้ำหนักในตัวอย่าง Keras แล้ว โปรดดูตัวอย่างต่อไปนี้:
- จัดกลุ่มน้ำหนักของโมเดล CNN ที่ได้รับการฝึกในชุดข้อมูลการจำแนกประเภทตัวเลขที่เขียนด้วยลายมือของ MNIST: รหัส
การจัดกลุ่มน้ำหนักจะขึ้นอยู่กับ Deep Compression: Compressing Deep Neural Networks With Pruning, Trained Quantization และ Huffman Coding paper ดูบทที่ 3 เรื่อง การวัดปริมาณและการแบ่งปันน้ำหนักที่ได้รับการฝึกอบรม