การสร้าง Autoencoder
Autoencoder มีการนำไปใช้งานที่น่าสนใจหลายด้าน เช่น การตรวจจับความผิดปกติ หรือการลดสัญญาณรบกวนในภาพ หลักการทำงานคือสร้างผลลัพธ์ให้เหมือนกับข้อมูลที่ป้อนเข้าไปมากที่สุด โดยข้อมูลจะถูกบีบอัดลงในพื้นที่มิติต่ำกว่าซึ่งเรียกว่าขั้นตอน encode จากนั้นโมเดลจะเรียนรู้ที่จะ decode ข้อมูลกลับสู่รูปแบบเดิม
ในแบบฝึกหัดนี้จะทำการ encode และ decode ชุดข้อมูล MNIST ของตัวเลขลายมือ โดย hidden layer จะ encode ภาพให้อยู่ในรูปแบบ 32 มิติ ซึ่งโดยปกติแล้วภาพต้นฉบับประกอบด้วย 784 พิกเซล (28 x 28) กล่าวคือ autoencoder จะเรียนรู้การแปลงภาพ 784 พิกเซลเดิมให้เป็นภาพที่บีบอัดแล้ว 32 พิกเซล และเรียนรู้วิธีใช้ representation ที่ encode ไว้นั้นเพื่อสร้างภาพ 784 พิกเซลต้นฉบับขึ้นมาใหม่
โมเดล Sequential และเลเยอร์ Dense พร้อมให้ใช้งานแล้ว
มาเริ่มสร้าง autoencoder กันเลย!
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Deep Learning เบื้องต้นด้วย Keras
คำแนะนำการฝึกหัด
- สร้างโมเดล
Sequential - เพิ่ม dense layer ที่มีจำนวนนิวรอนเท่ากับมิติของภาพที่ผ่านการ encode และกำหนด
input_shapeให้เท่ากับจำนวนพิกเซลของภาพต้นฉบับ - เพิ่มเลเยอร์สุดท้ายที่มีจำนวนนิวรอนเท่ากับจำนวนพิกเซลของภาพ input
- Compile
autoencoderโดยใช้adadeltaเป็น optimizer และใช้binary_crossentropyเป็น loss จากนั้นแสดงสรุปโมเดล
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Start with a sequential model
autoencoder = ____
# Add a dense layer with input the original image pixels and neurons the encoded representation
autoencoder.add(____(____, input_shape=(____, ), activation="relu"))
# Add an output layer with as many neurons as the orginal image pixels
autoencoder.add(____(____, activation = "sigmoid"))
# Compile your model with adadelta
autoencoder.compile(optimizer = ____, loss = ____)
# Summarize your model structure
____