To nie je vždy prípade, že filter veľkosti sú znížené alebo zvýšené so zvyšovaním počtu vrstiev v encoder. Vo väčšine príkladov encoder videl som z convolutional autoencoder architektúry výška a šírka sa zníži prostredníctvom strided convolution alebo zhromažďovanie a hĺbku vrstva je zvýšený (filter veľkosti sú zvýšené), vedené podobný posledný jeden alebo pestrá s každou novou vrstvou v encoder. Ale je tam aj príklady, kde výstupných kanálov, alebo filter veľkosti sú znížené s viac vrstiev.
Zvyčajne autoencoder kóduje vstup do latentného zastupovanie/vektor alebo vkladanie, ktorý má nižšiu úroveň ako vstup, ktorý minimalizuje rekonštrukcia chyba. Tak ako vyššie môžu byť použité pre vytváranie undercomplete autoencoder zmenou jadra veľkosť, počet vrstiev, pridaním ďalšej vrstvy na konci encoder s určitým rozmer atď.
Filter zvýšiť príklad
Na obrázku nižšie ako ďalšie vrstvy sú pridané v encoder filter veľkosti zvýšiť. Ale ako vstup 28*28*1 = 784
rozmer funkcie a vyrovnané zastúpenie 3*3*128 = 1152
je viac, takže ďalšia vrstva je pridané pred konečná vrstva, ktorá je vkladanie vrstvy. To znižuje funkciu rozmer s preddefinovanými počet výstupov v plne prepojenej siete. Aj posledný hustý/plne pripojený vrstva môže byť nahradené rôznymi počet vrstiev alebo jadra veľkosť mať výstupný (1, 1, NUM_FILTERS)
.
Filter zníženie príklad
Príklad jednoduché filtre znižuje v encoder ako počet vrstiev zvyšuje možno nájsť na keras convolutional autoencoder príklad rovnako ako váš kód.
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)
Odkazy