การปรับจูนแบบละเอียด: การยกเลิกการตรึงและการฝึกใหม่
base_model.trainable = True การยกเลิกการตรึงทีละเลเยอร์ และอัตราการเรียนรู้ที่แตกต่างกัน
การปรับจูนแบบละเอียด: การยกเลิกการตรึงและการฝึกใหม่ เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
เมื่อใดควรปรับจูนละเอียด
หลังจากการสกัดคุณลักษณะฝึกส่วนหัวแล้ว การปรับจูนละเอียดจะช่วยเพิ่มความแม่นยำด้วยการเปิดให้ส่วนบนของฐานที่ฝึกไว้ล่วงหน้าปรับเข้ากับข้อมูลของคุณ ควรทำเมื่อส่วนหัวคงที่แล้วเท่านั้น มิฉะนั้นการไล่ระดับสีขนาดใหญ่จากส่วนหัวที่ยังสุ่มอยู่สามารถทำลายฐานได้
การปลดการตรึงฐาน
กำหนด base.trainable = True เพื่อทำให้น้ำหนักสามารถปรับปรุงได้อีกครั้ง การทำเช่นนี้เพียงอย่างเดียวจะปลดการตรึงทุกชั้น ซึ่งโดยทั่วไปก้าวร้าวเกินไป
base.trainable = True
print("Trainable layers:", sum(l.trainable for l in base.layers))ตรึง N ชั้นแรก
ชั้นต้นเก็บตัวตรวจจับขอบและพื้นผิวทั่วไปที่คุณต้องการเก็บไว้ ให้ตรึง N ชั้นแรกอีกครั้ง แล้วปรับจูนละเอียดเฉพาะชั้นที่ลึกกว่าและเฉพาะเจาะจงกับงาน
base.trainable = True
freeze_until = 100 # keep first 100 layers frozen
for layer in base.layers[:freeze_until]:
layer.trainable = False
for layer in base.layers[freeze_until:]:
layer.trainable = Trueเหตุใดจึงต้องใช้อัตราการเรียนรู้ที่ต่ำมาก
การปรับจูนละเอียดต้องใช้อัตราการเรียนรู้ที่เล็กมาก เช่น 1e-5 น้ำหนักที่ฝึกไว้ล่วงหน้าดีอยู่แล้ว คุณเพียงต้องการปรับเล็กน้อยอย่างนุ่มนวล อัตราการเรียนรู้ที่สูงจะทำให้เกิดการลืมอย่างรุนแรงและลบล้างความรู้จาก ImageNet ที่คุณนำมาใช้
คอมไพล์ใหม่หลังปลดการตรึง
คุณต้อง compile ใหม่หลังเปลี่ยนสถานะใน trainable เพื่อให้ Keras สร้างรายการน้ำหนักที่จะได้รับการไล่ระดับสีขึ้นใหม่ ให้กำหนดอัตราการเรียนรู้ต่ำในขั้นตอนนี้
from tensorflow.keras.optimizers import Adam
model.compile(
optimizer=Adam(learning_rate=1e-5),
loss="categorical_crossentropy",
metrics=["accuracy"]
)กระบวนการสองระยะ
- ระยะที่ 1 (การสกัดคุณลักษณะ): ตรึงฐาน ฝึกส่วนหัวด้วยค่าประมาณ 1e-3 จนความแม่นยำบนชุดตรวจสอบหยุดเพิ่มขึ้น
- ระยะที่ 2 (การปรับจูนละเอียด): ปลดการตรึงชั้นบน compile ใหม่ด้วยค่าประมาณ 1e-5 แล้วฝึกต่อ
การแบ่งกระบวนการเช่นนี้ช่วยให้การฝึกมีเสถียรภาพและปกป้องคุณลักษณะที่ฝึกไว้ล่วงหน้า
การฝึกต่อในระยะที่ 2
ฝึกต่อจากจุดที่ระยะที่ 1 หยุดลงโดยใช้ initial_epoch เพื่อให้บันทึกและตารางกำหนดการดำเนินต่อเนื่องกัน
history2 = model.fit(
train_ds,
validation_data=val_ds,
epochs=20,
initial_epoch=10 # phase 1 ended at epoch 10
)ตัวกำหนดตารางอัตราการเรียนรู้
ตัวกำหนดตารางจะลดอัตราการเรียนรู้ลงตามเวลา เพื่อให้การปรับปรุงมีขนาดเล็กลงเมื่อโมเดลเข้าใกล้จุดบรรจบ ReduceLROnPlateau จะลดอัตราการเรียนรู้ลงโดยอัตโนมัติเมื่อค่าความสูญเสียบนชุดตรวจสอบหยุดลดลง
from tensorflow.keras.callbacks import ReduceLROnPlateau
lr_cb = ReduceLROnPlateau(
monitor="val_loss", factor=0.5,
patience=2, min_lr=1e-7
)
model.fit(train_ds, validation_data=val_ds,
epochs=20, callbacks=[lr_cb])ข้อควรระวังเกี่ยวกับ BatchNorm
ResNet และ EfficientNet มีชั้น BatchNorm ที่ติดตามสถิติสะสม เมื่อปรับจูนละเอียด การตรึงชั้น BN ไว้ (หรือให้ทำงานในโหมดอนุมาน) มักให้ผลลัพธ์ที่เสถียรกว่า เพราะการปรับปรุงสถิติจากชุดข้อมูลขนาดเล็กอาจทำให้ความแม่นยำลดลง
ระวังการเรียนรู้มากเกินไป
การปรับแต่งละเอียดเพิ่มพารามิเตอร์ที่ฝึกได้จำนวนมาก จึงทำให้ความเสี่ยงจากการเรียนรู้มากเกินไปสูงขึ้น ควรรับมือด้วยการเพิ่มความหลากหลายให้ข้อมูล การดรอปเอาต์ และ EarlyStopping โดยใช้ค่าความสูญเสียบนชุดตรวจสอบ
from tensorflow.keras.callbacks import EarlyStopping
stop = EarlyStopping(monitor="val_loss",
patience=4,
restore_best_weights=True)นำทุกอย่างมารวมกัน
กระบวนการปรับแต่งละเอียดที่มีความเสถียรควรทำดังนี้: ฝึก head, ปลดการตรึงเลเยอร์ด้านบน, ตรึง BN, คอมไพล์ใหม่ด้วยอัตราการเรียนรู้ 1e-5 จากนั้นฝึกต่อโดยใช้ตัวจัดตารางและการหยุดก่อนกำหนด ควรเปรียบเทียบความแม่นยำบนชุดตรวจสอบก่อนและหลังเสมอ เพื่อยืนยันว่าการปรับแต่งละเอียดช่วยได้จริง
ตรวจสอบอย่างรวดเร็ว
ทดสอบความรู้เกี่ยวกับการปรับแต่งละเอียดของคุณ
ทบทวน
คุณได้เรียนรู้การปรับแต่งละเอียดโดยตั้งค่า base.trainable=True ตรึง N เลเยอร์แรกอีกครั้ง คอมไพล์ใหม่ด้วยอัตราการเรียนรู้ที่ต่ำมาก (1e-5) และดำเนินการเป็นสองระยะ ตัวจัดตารางอัตราการเรียนรู้และการหยุดก่อนกำหนดช่วยให้กระบวนการมีเสถียรภาพ และเลเยอร์ BatchNorm ต้องได้รับการดูแลเป็นพิเศษ บทถัดไป: โมเดลน้ำหนักเบาสำหรับการนำไปใช้งานบนอุปกรณ์ปลายทาง
คำถามที่พบบ่อย
บทเรียน “การปรับจูนแบบละเอียด: การยกเลิกการตรึงและการฝึกใหม่” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การปรับจูนแบบละเอียด: การยกเลิกการตรึงและการฝึกใหม่” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การปรับจูนแบบละเอียด: การยกเลิกการตรึงและการฝึกใหม่”
base_model.trainable = True การยกเลิกการตรึงทีละเลเยอร์ และอัตราการเรียนรู้ที่แตกต่างกัน คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การปรับจูนแบบละเอียด: การยกเลิกการตรึงและการฝึกใหม่” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- แนวคิดและกลยุทธ์การเรียนรู้แบบถ่ายโอน
- การใช้ VGG16 และ ResNet50 เป็นแบบจำลองพื้นฐาน
- การปรับจูนแบบละเอียด: การยกเลิกการตรึงและการฝึกใหม่
- MobileNet และ EfficientNet สำหรับการนำไปใช้งานที่ขอบเครือข่าย