【问题标题】:Training the autoencoder with identical images用相同的图像训练自动编码器
【发布时间】:2020-07-03 23:26:57
【问题描述】:

我正在使用 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')

谢谢!

【问题讨论】:

  • 你有用于潜在表示的密集层吗?
  • @H. Lecter 博士:不,我没有致密层。为什么需要它以及如何将密集层集成到自动编码器中?非常感谢!
  • latent_dim 将取决于图像的类型、大小等。在 MNIST 数据集上,您可以将 latent_dim 设为 2,但这对于标准图像来说是极端的。
  • 答案有帮助吗?告诉我
  • @H. Lecter 博士:非常感谢您的快速回复!目前正在尝试实施。我会尽快为您提供反馈。

标签: tensorflow keras deep-learning autoencoder


【解决方案1】:

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

对于实现,来自本教程:https://www.tensorflow.org/tutorials/generative/cvae 我建议您在编码器和解码器部分之间添加这些行:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 2021-05-10
    • 2021-04-03
    • 2019-12-24
    • 2021-09-02
    • 2017-09-03
    • 1970-01-01
    相关资源
    最近更新 更多