Я пытаюсь выяснить, что: decoder.output_shape[1:]==IMG_SHAPE
.
У меня есть следующая функция, которую я запрограммировал.Когда я пытаюсь запустить decoder.output_shape[1:]==IMG_SHAPE
, я обнаруживаю, что форма моего изображения и выходная форма моего декодера не совпадают.
def build_deep_autoencoder(img_shape, code_size):
"""PCA's deeper brother."""
H,W,C = img_shape
# encoder
encoder = keras.models.Sequential()
encoder.add(L.InputLayer(img_shape))
# numbers of output channels: 32, 64, 128, 256.
encoder.add(L.Conv2D(filters=32, kernel_size=(3, 3), padding='same', activation='elu'))
encoder.add(L.MaxPooling2D())
encoder.add(L.Conv2D(filters=64, kernel_size=(3, 3), padding='same', activation='elu'))
encoder.add(L.MaxPooling2D())
encoder.add(L.Conv2D(filters=128, kernel_size=(3, 3), padding='same', activation='elu'))
encoder.add(L.MaxPooling2D())
encoder.add(L.Conv2D(filters=256, kernel_size=(3, 3), padding='same', activation='elu'))
encoder.add(L.MaxPooling2D())
encoder.add(L.Flatten()) #flatten image to vector
encoder.add(L.Dense(code_size, activation = 'elu'))
# decoder
decoder = keras.models.Sequential()
decoder.add(L.InputLayer((code_size,)))
# numbers of output channels: 128, 64, 32, 3.
decoder.add(L.Dense(np.prod(img_shape), activation = 'elu')) #actual decoder, height*width*3 units
decoder.add(L.Reshape(img_shape)) #un-flatten
decoder.add(L.Conv2DTranspose(filters=128, kernel_size=(3, 3), strides=2, activation='elu', padding='same'))
decoder.add(Conv2DTranspose(filters=64, kernel_size=(3, 3), strides=2, activation='elu', padding='same'))
decoder.add(L.Conv2DTranspose(filters=32, kernel_size=(3, 3), strides=2, activation='elu', padding='same'))
decoder.add(L.Conv2DTranspose(filters=3, kernel_size=(3, 3), strides=2, activation=None, padding='same'))
return encoder, decoder
Обратите внимание, что code_size=32
.
Я ожидаю, что выход decoder.output_shape[1:]==IMG_SHAPE
будет True
, но фактический выход False
.