การสร้างโมเดลการเรียนรู้เชิงลึก
แบบจำลองเครือข่ายประสาทเทียมของเราจะประกอบด้วยเลเยอร์เชิงเส้น ในการกำหนดรูปแบบดังกล่าวเราเรียกว่าSequential ฟังก์ชัน -
model = Sequential()
ชั้นอินพุต
เรากำหนดชั้นอินพุตซึ่งเป็นชั้นแรกในเครือข่ายของเราโดยใช้คำสั่งโปรแกรมต่อไปนี้ -
model.add(Dense(512, input_shape=(784,)))
สิ่งนี้สร้างเลเยอร์ที่มี 512 โหนด (เซลล์ประสาท) ที่มีโหนดอินพุต 784 โหนด นี่คือภาพด้านล่าง -
โปรดทราบว่าโหนดอินพุตทั้งหมดเชื่อมต่อกับ Layer 1 อย่างสมบูรณ์นั่นคือแต่ละโหนดอินพุตเชื่อมต่อกับโหนดทั้งหมด 512 โหนดของ Layer 1
ต่อไปเราต้องเพิ่มฟังก์ชั่นการเปิดใช้งานสำหรับเอาต์พุตของเลเยอร์ 1 เราจะใช้ ReLU เป็นการเปิดใช้งานของเรา ฟังก์ชันการเปิดใช้งานถูกเพิ่มโดยใช้คำสั่งโปรแกรมต่อไปนี้ -
model.add(Activation('relu'))
ต่อไปเราเพิ่ม Dropout 20% โดยใช้คำสั่งด้านล่าง การออกกลางคันเป็นเทคนิคที่ใช้เพื่อป้องกันไม่ให้โมเดลฟิตติ้งมากเกินไป
model.add(Dropout(0.2))
ณ จุดนี้เลเยอร์อินพุตของเราถูกกำหนดไว้อย่างสมบูรณ์ ต่อไปเราจะเพิ่มเลเยอร์ที่ซ่อนอยู่
เลเยอร์ที่ซ่อนอยู่
เลเยอร์ที่ซ่อนอยู่ของเราจะประกอบด้วย 512 โหนด อินพุตไปยังเลเยอร์ที่ซ่อนอยู่มาจากเลเยอร์อินพุตที่เรากำหนดไว้ก่อนหน้านี้ โหนดทั้งหมดเชื่อมต่ออย่างสมบูรณ์เหมือนในกรณีก่อนหน้านี้ ผลลัพธ์ของเลเยอร์ที่ซ่อนอยู่จะไปที่เลเยอร์ถัดไปในเครือข่ายซึ่งจะเป็นเลเยอร์สุดท้ายและเลเยอร์เอาต์พุตของเรา เราจะใช้การเปิดใช้งาน ReLU เช่นเดียวกับเลเยอร์ก่อนหน้าและการออกกลางคัน 20% รหัสสำหรับการเพิ่มเลเยอร์นี้มีให้ที่นี่ -
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.2))
เครือข่ายในขั้นตอนนี้สามารถมองเห็นได้ดังนี้ -
ต่อไปเราจะเพิ่มเลเยอร์สุดท้ายลงในเครือข่ายของเราซึ่งก็คือเลเยอร์เอาต์พุต โปรดทราบว่าคุณสามารถเพิ่มเลเยอร์ที่ซ่อนอยู่จำนวนเท่าใดก็ได้โดยใช้รหัสที่คล้ายกับรหัสที่คุณใช้ที่นี่ การเพิ่มเลเยอร์มากขึ้นจะทำให้เครือข่ายซับซ้อนสำหรับการฝึกอบรม อย่างไรก็ตามให้ข้อได้เปรียบที่ชัดเจนของผลลัพธ์ที่ดีกว่าในหลาย ๆ กรณีแม้ว่าจะไม่ใช่ทั้งหมด
เลเยอร์เอาต์พุต
เลเยอร์เอาต์พุตประกอบด้วยโหนดเพียง 10 โหนดเนื่องจากเราต้องการจัดประเภทรูปภาพที่กำหนดเป็นตัวเลข 10 หลัก เราเพิ่มเลเยอร์นี้โดยใช้คำสั่งต่อไปนี้ -
model.add(Dense(10))
เนื่องจากเราต้องการจำแนกเอาต์พุตเป็น 10 หน่วยที่แตกต่างกันเราจึงใช้การเปิดใช้งาน softmax ในกรณีของ ReLU เอาต์พุตจะเป็นไบนารี เราเพิ่มการเปิดใช้งานโดยใช้คำสั่งต่อไปนี้ -
model.add(Activation('softmax'))
ณ จุดนี้เครือข่ายของเราสามารถมองเห็นได้ดังแสดงในแผนภาพด้านล่าง -
ณ จุดนี้รูปแบบเครือข่ายของเราถูกกำหนดไว้อย่างสมบูรณ์ในซอฟต์แวร์ เรียกใช้เซลล์รหัสและหากไม่มีข้อผิดพลาดคุณจะได้รับข้อความยืนยันบนหน้าจอดังที่แสดงในภาพหน้าจอด้านล่าง -
ต่อไปเราต้องรวบรวมแบบจำลอง