0Pricing
Learn AI with Python · บทเรียน

การปรับจูนแบบละเอียด: การยกเลิกการตรึงและการฝึกใหม่

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. ระยะที่ 1 (การสกัดคุณลักษณะ): ตรึงฐาน ฝึกส่วนหัวด้วยค่าประมาณ 1e-3 จนความแม่นยำบนชุดตรวจสอบหยุดเพิ่มขึ้น
  2. ระยะที่ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. แนวคิดและกลยุทธ์การเรียนรู้แบบถ่ายโอน
  2. การใช้ VGG16 และ ResNet50 เป็นแบบจำลองพื้นฐาน
  3. การปรับจูนแบบละเอียด: การยกเลิกการตรึงและการฝึกใหม่
  4. MobileNet และ EfficientNet สำหรับการนำไปใช้งานที่ขอบเครือข่าย
← กลับไปที่ Learn AI with Python