Il n'est pas toujours le cas que les tailles de filtre sont réduit ou augmenté avec l'augmentation du nombre de couches dans le codeur. Dans la plupart des exemples de codeur, j'ai vu de convolution autoencoder architectures de la hauteur et la largeur est réduite par strided convolution ou la mise en commun, et la profondeur de la couche est augmentée (de tailles de filtre sont à la hausse), conservé à l'un ou varient avec chaque nouvelle couche dans le codeur. Mais il y a aussi des exemples où les canaux de sortie ou de tailles de filtre sont diminués avec plus de couches.
Généralement autoencoder code de l'entrée dans latente de représentation/vecteur ou d'insertion qui a une plus faible dimension de l'entrée qui minimise l'erreur de reconstruction. Afin que tous les ci-dessus peut être utilisé pour la création de undercomplete autoencoder en variant la taille du noyau, le nombre de couches, ajouter une couche supplémentaire à la fin de codeur avec une certaine dimension, etc.
Filtre à accroître exemple
Dans l'image ci-dessous que plus de couches sont ajoutés dans l'encodeur le filtre de l'augmentation de la taille. Mais comme l'entrée 28*28*1 = 784
dimension des fonctionnalités et de la représentation aplatie 3*3*128 = 1152
est plus alors une autre couche est ajoutée avant la couche finale qui est l'incorporation de la couche. Il réduit la fonction de la dimension de nombre prédéfini de sorties entièrement connecté en réseau. Même le dernier dense/entièrement connecté couche peut être remplacé en variant le nombre de couches ou de la taille du noyau d'avoir une sortie (1, 1, NUM_FILTERS)
.
Filtre diminution exemple
Un exemple simple de filtres en baisse dans le codeur comme le nombre de couches augmentation peut être trouvé sur keras convolutifs autoencoder exemple, tout comme votre code.
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)
Références