มันไม่ใช่ในกรณีนี้ที่ตัวกรองขนาดไหลดหรือเพิ่มจำนวนกับเพิ่มขึ้นจำนวนของชั้นอยู่ในตัวเข้ารหัส. ในที่สุดตัวอย่างของตัวเข้ารหัสฉันต้องเห็นของ convolutional autoencoder architectures ความสูงและความกว้างเป็น decreased ผ่าน strided convolution หรือ pooling และความลึกของเลเยอร์ก็เพิ่มจำนวน(ตัวกรองขนาดไหเพิ่มจำนวน)เก็บไว้คล้ายกับสุดท้ายหรือความผันผวนเกี่ยวกับเลเยอร์ใหม่ในตัวเข้ารหัส. แต่มันจะเป็นตัวอย่างที่ช่องสัญญาณส่งออกหรือตัวกรองขนาดไห decreased กันอีกเลเยอร์.
ปกติแล้ว autoencoder encodes นำเข้าข้อมูลเข้า latent ตัวแทน/เว็กเตอหรือฝังตัวที่มีด้านล่างมิตินำเข้าข้อมูลมากกว่านั้น minimizes ชิ้นข้อผิดพลาด ดังนั้นทั้งสองของเหนือสามารถถูกใช้เพื่อสร้าง undercomplete autoencoder โดย varying เคอร์เนลขนาดจำนวนของชั้น,เพิ่มเป็นพิเศษเลเยอร์ในตอนจบของตัวเข้ารหัสกับบางอย่างมิติเป็นต้น
ตัวกรองเพิ่มตัวอย่างเช่น
ในภาพด้านล่างนี้เป็นมากกว่าพวกเสื้อผ้าหลายชั้นเป็นการเพิ่มในตัวเข้ารหัสตัวกรองที่เพิ่มขนาด. แต่เหมือนำเข้าข้อมูล 28*28*1 = 784
มิติที่มีคุณสมบัติและ flattened ตัวแทน 3*3*128 = 1152
มากกว่าดังนั้นอีกเลเยอร์เป็นการเพิ่มก่อนที่สุดท้ายเลเยอร์ซึ่งเป็นการฝังตัวเลเยอร์. มัน reduces ความสามารถของคุณสมบัติมุนกับค่าที่นิยามไว้แล้วจำนวนของแสดงผลอยู่เต็มที่เชื่อมต่อเครือข่าย แม้แต่สุดท้ายละเอียด/เต็มที่เกี่ยวข้องเลเยอร์สามารถถูกแทนที่ด้วย varying จำนวนของชั้นหรือเคอร์เนลขนาดของเพื่อเป็นการแสดงผล (1, 1, NUM_FILTERS)
.
ตัวกรองลดตัวอย่างเช่น
เป็นเรื่องง่ายกตัวอย่างของตัวกรอง decreasing ในตัวเข้ารหัสเป็นจำนวนของชั้นเพิ่มความสามารถถูกพบบ keras convolutional autoencoder ตัวอย่างเหมือนรหัสของคุณ.
import keras
from keras import layers
input_img = keras.Input(shape=(28, 28, 1))
x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
encoded = layers.MaxPooling2D((2, 2), padding='same')(x)
อ้างอิง