Nie zawsze jest tak, że wymiary filtrów zmniejszają lub zwiększają się wraz ze wzrostem liczby warstw w кодере. W większości przykładów kodera, które widziałem w сверточных architekturze автоэнкодера, wysokość i szerokość są zmniejszone kosztem turowa zestawienia lub stowarzyszenia, a głębokość warstwy wzrasta (wymiary filtrów zwiększa się), utrzymuje się podobnie do poprzedniego lub zmienia się z każdą nową warstwą w кодере. Ale są też przykłady, kiedy kanały wyjściowe lub wymiary filtrów zmniejszają się wraz ze wzrostem liczby warstw.
Zazwyczaj автоэнкодер koduje dane wejściowe w ukryty widok/wektor lub załącznik, który ma mniejszy rozmiar, niż dane wejściowe, co minimalizuje błąd odzyskiwania. W ten sposób obie powyższe metody mogą być wykorzystywane do tworzenia niekompletnego автоэнкодера poprzez zmianę rozmiaru jądra, ilości warstw, dodanie dodatkowej warstwy w końcu kodera z określonym rozmiarem itp.
Przykład powiększenie filtra
Na zdjęciu poniżej po dodaniu większej ilości warstw w кодере wymiary filtrów zwiększa się. Ale jako danych wejściowych 28*28*1 = 784
wymiarowe obiekty i wygładzona widok 3*3*128 = 1152
ponadto, przed ostatnią warstwą dodaje jeszcze jedną warstwę, która jest warstwą osadzania. To zmniejsza rozmiar obiektu z góry określonej liczby wyjść w pełni podłączonej sieci. Nawet ostatnio mocno/całkowicie podłączony warstwa może być zastąpiony przez zmianę ilości warstw lub wielkości jądra do wyjścia (1, 1, NUM_FILTERS)
.
Przykład zmniejszyć filtra
Prosty przykład zmniejszyć filtrów w кодере wraz ze wzrostem liczby warstw można znaleźć na przykładzie сверточного автоэнкодера keras, jak i w swoim kodzie.
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)
Zalecenia