การสร้างโมเดลการเรียนรู้เชิงลึก

แบบจำลองเครือข่ายประสาทเทียมของเราจะประกอบด้วยเลเยอร์เชิงเส้น ในการกำหนดรูปแบบดังกล่าวเราเรียกว่า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'))

ณ จุดนี้เครือข่ายของเราสามารถมองเห็นได้ดังแสดงในแผนภาพด้านล่าง -

ณ จุดนี้รูปแบบเครือข่ายของเราถูกกำหนดไว้อย่างสมบูรณ์ในซอฟต์แวร์ เรียกใช้เซลล์รหัสและหากไม่มีข้อผิดพลาดคุณจะได้รับข้อความยืนยันบนหน้าจอดังที่แสดงในภาพหน้าจอด้านล่าง -

ต่อไปเราต้องรวบรวมแบบจำลอง