我正在用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')
谢谢!
您需要在自动进化编码器和自动进化解码器之间添加一个密集层。这就是潜在的再生,也称为嵌入层。这是对图像进行压缩的层。这就是架构试图"学习"的"压缩知识"。
对于实现,请参阅本教程:https://www.tensorflow.org/tutorials/generative/cvae我建议你在编码器和解码器之间添加这些行:
x = tf.keras.layers.Flatten()(x),
x = tf.keras.layers.Dense(latent_dim + latent_dim)