ฉันกำลังฝึกโครงข่ายประสาทเทียมสำหรับโครงการของฉันโดยใช้ Keras Keras ได้จัดเตรียมฟังก์ชันสำหรับการหยุดก่อนกำหนด ฉันขอทราบได้ไหมว่าควรปฏิบัติตามพารามิเตอร์ใดเพื่อหลีกเลี่ยงไม่ให้เครือข่ายประสาทเทียมของฉันติดตั้งมากเกินไปโดยใช้การหยุดก่อน
ฉันกำลังฝึกโครงข่ายประสาทเทียมสำหรับโครงการของฉันโดยใช้ Keras Keras ได้จัดเตรียมฟังก์ชันสำหรับการหยุดก่อนกำหนด ฉันขอทราบได้ไหมว่าควรปฏิบัติตามพารามิเตอร์ใดเพื่อหลีกเลี่ยงไม่ให้เครือข่ายประสาทเทียมของฉันติดตั้งมากเกินไปโดยใช้การหยุดก่อน
คำตอบ:
การหยุดก่อนกำหนดเป็นการหยุดการฝึกเมื่อการสูญเสียของคุณเริ่มเพิ่มขึ้น (หรืออีกนัยหนึ่งความแม่นยำในการตรวจสอบความถูกต้องเริ่มลดลง) ตามเอกสารจะใช้ดังนี้
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=0,
verbose=0, mode='auto')
ค่าต่างๆขึ้นอยู่กับการนำไปใช้งานของคุณ (ปัญหาขนาดแบทช์ ฯลฯ ... ) แต่โดยทั่วไปเพื่อป้องกันการติดตั้งมากเกินไปฉันจะใช้;
monitor
'val_loss'min_deltaเป็นเกณฑ์ว่าจะประเมินปริมาณการสูญเสียในบางยุคว่าเป็นการปรับปรุงหรือไม่ หากความแตกต่างของการสูญเสียต่ำกว่าmin_deltaนั้นจะถูกนับเป็นปริมาณที่ไม่มีการปรับปรุง ดีกว่าที่จะปล่อยให้เป็น 0 เนื่องจากเราสนใจว่าเมื่อใดที่การสูญเสียแย่ลงpatienceอาร์กิวเมนต์แสดงถึงจำนวนยุคก่อนที่จะหยุดเมื่อการสูญเสียของคุณเริ่มเพิ่มขึ้น (หยุดปรับปรุง) ขึ้นอยู่กับการใช้งานของคุณหากคุณใช้แบทช์ขนาดเล็กมาก
หรืออัตราการเรียนรู้ที่มากการสูญเสียซิกแซกของคุณ (ความแม่นยำจะมีเสียงดังมากขึ้น) ดังนั้นควรตั้งค่าpatienceอาร์กิวเมนต์ขนาดใหญ่ หากคุณใช้แบทช์จำนวนมากและอัตราการเรียนรู้น้อยการสูญเสียของคุณจะราบรื่นขึ้นเพื่อให้คุณสามารถใช้patienceอาร์กิวเมนต์น้อยลงได้ ไม่ว่าจะด้วยวิธีใดฉันจะปล่อยให้เป็น 2 ดังนั้นฉันจะให้โอกาสนางแบบมากขึ้นverbose ตัดสินใจว่าจะพิมพ์อะไรปล่อยให้เป็นค่าเริ่มต้น (0)modeอาร์กิวเมนต์ขึ้นอยู่กับสิ่งทิศทางปริมาณการตรวจสอบของคุณได้ (มันควรจะลดลงหรือเพิ่มขึ้น) minเนื่องจากเราตรวจสอบการสูญเสียเราสามารถใช้ แต่ขอปล่อยให้ keras จัดการกับเราและตั้งค่าเป็นautoดังนั้นฉันจะใช้สิ่งนี้และทดลองโดยการวางแผนการสูญเสียข้อผิดพลาดโดยไม่ต้องหยุดก่อน
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=2,
verbose=0, mode='auto')
สำหรับความคลุมเครือที่อาจเกิดขึ้นเกี่ยวกับวิธีการโทรกลับฉันจะพยายามอธิบายเพิ่มเติม เมื่อคุณเรียกfit(... callbacks=[es])ใช้โมเดลของคุณ Keras จะเรียกใช้ฟังก์ชันที่กำหนดไว้ล่วงหน้าของวัตถุเรียกกลับ ฟังก์ชั่นเหล่านี้สามารถเรียกว่าon_train_begin, on_train_end, on_epoch_begin, on_epoch_endและ,on_batch_begin on_batch_endการหยุดการโทรกลับก่อนกำหนดจะถูกเรียกในทุกช่วงปลายเปรียบเทียบค่าที่ตรวจสอบได้ดีที่สุดกับค่าปัจจุบันและจะหยุดหากตรงตามเงื่อนไข (กี่ยุคที่ผ่านมานับตั้งแต่การสังเกตค่าที่ตรวจสอบดีที่สุดและเป็นมากกว่าการโต้แย้งความอดทนความแตกต่างระหว่าง ค่าสุดท้ายมากกว่า min_delta เป็นต้น .. )
ในฐานะที่เป็นแหลมโดย @BrentFaust ในความคิดเห็นการฝึกอบรมรุ่นจะดำเนินต่อไปจนกว่าเงื่อนไขอย่างใดอย่างหนึ่งในช่วงต้นจะได้พบกับการหยุดหรือepochsพารามิเตอร์ (default = 10) ในการfit()เป็นที่พอใจ การตั้งค่าการโทรกลับก่อนหยุดจะไม่ทำให้โมเดลฝึกเกินepochsพารามิเตอร์ ดังนั้นfit()ฟังก์ชันการโทรที่มีepochsค่ามากขึ้นจะได้รับประโยชน์มากขึ้นจากการโทรกลับก่อนหยุด
callbacks=[EarlyStopping(patience=2)]ไม่มีผลเว้นแต่ epochs model.fit(..., epochs=max_epochs)จะได้รับการ
epoch=1ในลูป (สำหรับกรณีการใช้งานที่หลากหลาย) ซึ่งการเรียกกลับนี้จะล้มเหลว หากคำตอบของฉันมีความคลุมเครือฉันจะพยายามอธิบายให้ดีขึ้น
restore_best_weightsอาร์กิวเมนต์ (ยังไม่ได้อยู่ในเอกสารประกอบ) ซึ่งจะโหลดแบบจำลองด้วยน้ำหนักที่ดีที่สุดหลังการฝึกอบรม แต่สำหรับจุดประสงค์ของคุณฉันจะใช้การModelCheckpointเรียกกลับด้วยการsave_best_onlyโต้แย้ง คุณสามารถตรวจสอบเอกสารได้ทันทีที่จะใช้ แต่คุณต้องโหลดน้ำหนักที่ดีที่สุดด้วยตนเองหลังการฝึกอบรม
min_deltaเป็นเกณฑ์ว่าจะวัดปริมาณการเปลี่ยนแปลงของมูลค่าที่ตรวจสอบว่าเป็นการปรับปรุงหรือไม่ ใช่ถ้าเราให้monitor = 'val_loss'มันจะอ้างถึงความแตกต่างระหว่างการสูญเสียการตรวจสอบความถูกต้องในปัจจุบันและการสูญเสียการตรวจสอบความถูกต้องก่อนหน้านี้ ในทางปฏิบัติหากคุณmin_delta=0.1ลดการสูญเสียการตรวจสอบความถูกต้อง (ปัจจุบัน - ก่อนหน้า) ที่น้อยกว่า 0.1 จะไม่สามารถหาปริมาณได้ดังนั้นจะหยุดการฝึกอบรม (ถ้าคุณมีpatience = 0)