No es siempre el caso de que los tamaños de filtro se reduce o aumenta con el aumento del número de capas en el codificador. En la mayoría de los ejemplos de codificador he visto de convolucional autoencoder arquitecturas de la altura y la anchura se reduce a través strided de convolución o agrupación, y la profundidad de la capa es mayor (tamaños de filtro son el aumento de la), mantuvo similar a la última o varía con cada nueva capa en el codificador. Pero también hay ejemplos en los que los canales de salida o tamaños de filtro se redujo con más capas.
Generalmente autoencoder codifica entrada en latente de representación/vector o incrustación que tiene menor dimensión que los de entrada, que minimiza el error de reconstrucción. Por lo tanto, de lo anterior puede ser utilizado para la creación de undercomplete autoencoder variando el tamaño del núcleo, el número de capas, añadiendo una capa extra al final de encoder con una cierta dimensión etc.
Filtro de aumentar el ejemplo
En la imagen de abajo a medida que más se añaden capas en el codificador de la filtro de aumento de tamaño. Pero como la entrada 28*28*1 = 784
dimensión y características de la representación plana 3*3*128 = 1152
es más otra capa se añade antes de la capa final que es la incrustación de la capa. Reduce la función de la dimensión con el número predefinido de salidas en la red totalmente conectada. Incluso la última densa y completamente conectado capa puede ser reemplazado por la variación del número de capas o el tamaño de kernel para tener una salida (1, 1, NUM_FILTERS)
.
Filtro de disminuir ejemplo
Un ejemplo fácil de filtros de la disminución en el codificador como el número de capas de aumento puede ser encontrado en keras convolucional autoencoder ejemplo, como su código.
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)
Referencias