แก้ไขแล้ว: ส่งออกโมเดล keras ในยุคเฉพาะ

การปรับปรุงครั้งล่าสุด: 09/25/2023
ผู้แต่ง: หลาม SourceTrail

Kerasเป็นไลบรารีโครงข่ายประสาทเทียมแบบโอเพนซอร์สที่เขียนด้วยภาษา Python สามารถทำงานบน TensorFlow, Microsoft Cognitive Toolkit, R, Theano หรือ PlaidML ได้ ข้อดีอย่างหนึ่งของ Keras คือการอนุญาตให้นักพัฒนาสามารถส่งออกโมเดลที่จำนวนรอบการฝึก (epochs) ที่กำหนด ซึ่งเป็นประโยชน์อย่างมากในการปรับแต่งโมเดลและการประเมินประสิทธิภาพ

ปัญหา

เมื่อฝึกโมเดลแมชชีนเลิร์นนิง เรามักจะตรวจสอบการสูญเสียหรือประสิทธิภาพของฟังก์ชันเมตริกเพื่อดูข้อมูลการตรวจสอบความถูกต้องบางอย่าง ยุคที่แตกต่างกันอาจส่งผลให้มีประสิทธิภาพของโมเดลที่แตกต่างกัน บางครั้ง ผลลัพธ์ที่ดีที่สุดอาจได้รับในช่วงเวลาที่ไม่สอดคล้องกับจุดสิ้นสุดของกระบวนการฝึกอบรม ในสถานการณ์เช่นนี้ มันจะมีประโยชน์หากเราสามารถบันทึก/ส่งออกโมเดล keras ในยุคเฉพาะได้

Solution

วิธีแก้ไขปัญหานี้อยู่ใน Keras Callbacks Callback คือออบเจ็กต์ (อินสแตนซ์ของคลาสที่ใช้วิธีการเฉพาะ) ที่ถูกส่งผ่านไปยังโมเดลในการเรียกเพื่อให้เหมาะสม และถูกเรียกโดยโมเดลที่จุดต่างๆ ระหว่างการฝึก มีสิทธิ์เข้าถึงข้อมูลที่มีอยู่ทั้งหมดเกี่ยวกับสถานะของโมเดลและประสิทธิภาพของโมเดล

ฟังก์ชันการโทรกลับแบบกำหนดเองช่วยให้เราสามารถระบุการดำเนินการในขั้นตอนต่างๆ ของการฝึก เช่น ที่จุดเริ่มต้นหรือจุดสิ้นสุดของยุค ก่อนหรือหลังชุดเดียว เป็นต้น การดำเนินการอย่างหนึ่งดังกล่าวอาจเป็นการบันทึกโมเดลในยุคเฉพาะ

คำอธิบายทีละขั้นตอนของรหัส

ขั้นแรก เรากำหนดการเรียกกลับแบบกำหนดเองเพื่อบันทึกโมเดลในยุคเฉพาะ

class CustomSaver(keras.callbacks.Callback):
    def on_epoch_end(self, epoch, logs={}):
        if epoch == 9:  # or save after some epoch, each k-th epoch etc.
            self.model.save("model_{}.hd5".format(epoch))

ต่อไป เราจะเพิ่มการเรียกกลับนี้ให้กับกระบวนการปรับโมเดล

model = ...  # create model
model.compile(optimizer='...', loss='...')  # compile model

saver = CustomSaver()
model.fit(..., callbacks=[saver]) # put your X_train, Y_train ...

ในโค้ดด้านบน เราสร้างอินสแตนซ์ของคลาส CustomSaver จากนั้นส่งต่อไปยังเมธอด fit ของโมเดลซึ่งเป็นส่วนหนึ่งของรายการโทรกลับ

ด้วยการแก้ไขเงื่อนไข “if” ภายในเมธอด 'on_epoch_end' ของเรา เราจะสามารถบันทึกการโทรกลับหลังจากแต่ละยุค 'k' หรือเมื่อใดก็ตามที่ตรงตามเงื่อนไขเฉพาะ

ห้องสมุด Keras และหน้าที่ของมัน

การออกแบบที่ทันสมัยและใช้งานง่ายของ Keras ช่วยลดความยุ่งยากในการสร้างและแก้ไขโมเดลการเรียนรู้เชิงลึก มันมาพร้อมกับเครื่องมือหลายอย่าง เช่น คลาส Sequential และ Model สำหรับการสร้างแบบจำลอง เลเยอร์ต่างๆ สำหรับโครงข่ายประสาทเทียม (Convolutional, Pooling, Dense ฯลฯ) และการโทรกลับสำหรับการตรวจสอบการฝึกอบรม

หนึ่งในแง่มุมที่มีประโยชน์ที่สุดของการโทรกลับคือการหยุดการฝึกตั้งแต่เนิ่นๆ หรือบันทึกโมเดลที่ดีที่สุดตามประสิทธิภาพการตรวจสอบ เป็นฟีเจอร์ที่ถูกถามบ่อยมากที่ Keras มีการโทรกลับในตัวอยู่แล้ว ซึ่งเรียกว่า ModelCheckpoint และ EarlyStopping

แค่นั้นแหละ! ตอนนี้ใช้ความรู้นี้กับสถานการณ์ของคุณและบันทึกโมเดล Keras ในยุคที่ให้ประสิทธิภาพที่ดีที่สุด การฝึกโมเดลอย่างมีความสุข!

กระทู้ที่เกี่ยวข้อง: