Вы путаетесь между соглашением об именах, которые используются. Ввод Model(..)
и ввод декодера.
В этом коде два отдельных Model(...)
создаются для кодера и декодера. Когда вы создадите свою окончательную модель автоэнкодера, например, на этом рисунке вам нужно подать выход кодера на вход декодера.
![enter image description here](https://i.stack.imgur.com/hW5HK.jpg)
Как вы описали, «декодер использует latent_inputs в качестве входных данных, но latent_inputs поступает от Input ( этот вход является входом только для модели декодера, а не модели Autoencoder )».
encoder = Model(inputs, latent, name='encoder')
создает модель кодера, а decoder = Model(latent_inputs, outputs, name='decoder')
создает модель декодера, которая использует latent_inputs
в качестве входа, который является выходом модели кодера.
Окончательная модель автоэнкодера будет сгенерирована,
autoencoder = Model(inputs, decoder(encoder(inputs)), name='autoencoder')
Здесь ваш вход для модели кодера от inputs
, а ваш выход от модели декодера - это ваш конечный выход для автоматического кодера. И чтобы создать вывод кодера, сначала он передает inputs
в encoder(...)
, а выход кодера передает в декодер как decoder(encoder(...))
Для простоты вы также можете создать такую модель,
# Build the Autoencoder Model
# Encoder
inputs = Input(shape=input_shape, name='encoder_input')
x = inputs
for filters in layer_filters:
x = Conv2D(filters=filters,
kernel_size=kernel_size,
strides=2,
activation='relu',
padding='same')(x)
shape = K.int_shape(x)
x = Flatten()(x)
latent = Dense(latent_dim, name='latent_vector')(x)
# Decoder
x = Dense(shape[1] * shape[2] * shape[3])(latent)
x = Reshape((shape[1], shape[2], shape[3]))(x)
for filters in layer_filters[::-1]:
x = Conv2DTranspose(filters=filters,
kernel_size=kernel_size,
strides=2,
activation='relu',
padding='same')(x)
x = Conv2DTranspose(filters=1,
kernel_size=kernel_size,
padding='same')(x)
outputs = Activation('sigmoid', name='decoder_output')(x)
autoencoder = Model(inputs, outputs, name='autoencoder')
autoencoder.summary()