用相同的图像训练自动编码器

时间:2020-03-23 13:34:59

标签: tensorflow keras deep-learning autoencoder

我正在用2000张相同图像训练自动编码器。我的期望是,给定自动编码器具有足够的容量,经过一定的训练时间后,损耗将接近0,而精度将接近1。相反,我看到快速收敛到损失= 0.07和精度= 0.76。减少卷积层的数量有一些改进。减少每层内核的数量会增加损耗。此后没有任何改善。我的期望错了吗?还是我的自动编码器架构有问题?如何制作几乎无损的自动编码器?

input_img = Input(shape=(image_size_x, image_size_y, 1))
x = Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(16, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)

x = Conv2D(16, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)

autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要在自动卷积编码器和自动卷积解码器之间添加一个密集层。这就是潜在的表现形式,也称为嵌入层。这是压缩图像的层。这就是架构试图“学习”的“压缩知识”。

有关实现,请参见本教程:https://www.tensorflow.org/tutorials/generative/cvae 我建议您在编码器和解码器部分之间添加以下行:

x = tf.keras.layers.Flatten()(x),
x = tf.keras.layers.Dense(latent_dim + latent_dim)