【问题标题】:How a decoder converts the lower dimension to higher dimension in autoencoders?解码器如何将自编码器中的低维转换为高维?
【发布时间】:2021-03-07 05:53:40
【问题描述】:

我正在构建一个自动编码器。我在谷歌上读到编码器压缩数据,比如将 784 个维度转换为 100 个隐藏的瓶颈神经元,然后解码器将 100 个维度再次转换为 784,我想知道它(解码器)是如何转换的从低维到高维,因为如果我们谈论编码器,它可能会通过消除一些冗余比特来减少比特数,并选择应该丢弃哪些特征以及哪些方面可以相关。但是低维如何再次转换为高维,要么是通过再次添加我们在编码器中丢弃的比特,要么是通过其他方式。请详细说明

【问题讨论】:

  • 这个想法是,由于图像的像素不是相互独立的,因此原始图像的有效维数通常低于 784。想象一个极端情况,所有图像都有一条黑色水平线白色背景。那么图像可以用一个数字(线的高度)来表示,即维度是一。自动编码器以更复杂的方式做同样的事情。
  • 但它会将输出作为像素数而不是行高。

标签: machine-learning keras deep-learning artificial-intelligence autoencoder


【解决方案1】:

混淆似乎源于假设编码器和解码器是在学习过程中单独训练的独立过程,但事实并非如此。该模型一起学习编码和解码。这就是为什么自动编码器中的损失函数 L(x,x̂ ) 是自动编码器输入(原始样本 x)和输出(重构样本 x̂)的函数。更多详细信息可以找到here。当然,一旦模型训练好,就可以分别使用每个模型进行编码或解码。

【讨论】:

    【解决方案2】:

    自动编码器 - 解码器部分是如何工作的?

    确实,经典的 MNIST 自动编码器接收 28x28 大小(784 像素)的数字图像,我们可以像这样在 python 中定义一个

    import tensorflow as tf
    
    encoder = tf.keras.models.Sequential([
        tf.keras.layers.InputLayer((28,28)),
        tf.keras.layers.Flatten(),
        tf.keras.layers.Dense(100, activation='sigmoid')
    ])
    
    encoder = tf.keras.models.Sequential([
        tf.keras.layers.InputLayer(input_shape=(100,)),
        tf.keras.layers.Dense(784),
        tf.keras.layers.Reshape((28,28)),
    ])
    
    autoencoder = tf.keras.models.Sequential([
        encoder,
        decoder
    ])
    

    这不是最好的,但它会达到我们的目的。现在假设输入不是 MNIST 手写数字,而是一张不包含或不包含以下内容的图片:

    • 左上角的加号
    • 左下角的圆圈
    • 右上角的斜线
    • 右下角的一个正方形

    并且每个项目不会与其他项目重叠并且始终相同。如果我将其用于encode,我会将每个图像转换为 4 个数据点的布尔“编码”,即每个特征的真/假。如果我被要求制作一个解码器来读取编码并正确地重新创建原始图像,那么就没有问题了。我会绘制或不绘制每个字形,具体取决于我的编码中的特征是真还是假。

    我们上面的自动编码器可以适应/训练做的事情非常相似。它将使用编码器部分对图片中存在的最常用和可重用的结构和模式进行编码。解码器将用于获取每个特征并有条件地将像素写入输出图像。

    在我们上面的示例decoder 中,它有一个dense(784) 层。该层有 100 个输入和 784 个输出,用于形状为 100x784 的总内部权重矩阵。这意味着对于每个嵌入层值,它可以修改输出图像的部分、无或全部像素。这个玩具网络实际上会在加/圆/斜线/正方形问题上表现出色,因为解码器可以使用每个特征将重要信息(原始图像的完整再现)写入输出。

    另一种考虑权重矩阵为 100x784 的解码器的方式是,它已经记住了整个 784 输出图像的 100 个完整变体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      • 1970-01-01
      • 2023-04-03
      • 2020-08-14
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      相关资源
      最近更新 更多