【问题标题】:Tensorflow autoencoder: How to get representative output?Tensorflow 自动编码器:如何获得有代表性的输出?
【发布时间】:2017-07-11 13:05:15
【问题描述】:

设置

我用 Tensorflow 为图像构建了一个自动编码器。我的图像的长度和宽度约为 30 像素。我正在使用 5 层:

  1. 输入层
  2. 编码器层有 256 个神经元,具有线性函数。 (这一层应该起到预处理 PCA 的作用。)
  3. 具有 128 个神经元和 sigmoid 函数的编码器层。
  4. 解码器层有 256 个神经元,具有 sigmoid 函数。
  5. 解码器/输出层具有与线性函数输入一样多的神经元。

所有层都使用偏差并且是这样定义的

layer_1 = tf.nn.sigmoid(tf.add(
   tf.matmul(x, tf.Variable(tf.random_normal([n_input, n_hidden_1]))),
   tf.Variable(tf.random_normal([n_hidden_1]))
))

我的成本定义为

cost = tf.reduce_mean(tf.div(tf.reduce_sum(tf.pow(y_true - y_pred, 2)), 2))

我使用了RMSPropOptimizer,开始学习率为0.01

我用大约 250000 张图像训练了自动编码器。下面我展示了测试数据的结果,我没有用这些数据进行训练。上排始终显示输入图像,下排始终显示输出图像。

我在 MNIST 数据上使用了令人满意的自动编码器(数组单元格是 0-1 的值):

我在自己拍摄的照片上使用了令人满意的自动编码器(数组单元格的值是 0-100):

均方根误差在哪里

rmse = tf.sqrt(tf.reduce_mean(tf.square(tf.sub(y_true, y_pred)), axis=1))

正如人们所期望的那样 - 前三张照片较高(变暗、变白、打叉),而未更改的照片则较低:

17.5, 29.6, 12.9, 11.7, 11.2, 11.7, 7.3, 7.1, 7.1, 8.1

但自动编码器对纹理图像(数组单元格从 0-1)来说并不令人满意。首先我使用RMSPropOptimizer 并得到了

由于我在训练期间的成本相当高并且没有改变,我遵循了https://stackoverflow.com/a/40956761/4533188 的建议并使用了AdamOptimizer。事实上,我得到了更好的结果

虽然成本较低,但在各个时期内它们仍然保持不变:

输出图像也很暗。我相信这也可能是我的rmses 不是我所期望的原因:

0.4642, 0.2669, 0.4976, 0.4378, 0.4753, 0.4688, 0.4615, 0.4571, 0.4691, 0.4487

请注意,我预计第一张图像的rmses 较高,因为中间有一个点,而第二张图像变暗了。我猜rmses 没有达到预期的原因是因为输出图像太暗了。

问题

  1. 为什么成本在各个时期都没有降低,我该怎么做才能做到这一点?
  2. 为什么输出图像如此暗,我该怎么做才能让它们更好地表示输入图像?
  3. 如何让rmses 符合我的预期?

【问题讨论】:

    标签: python machine-learning tensorflow computer-vision autoencoder


    【解决方案1】:

    你的网络显然没有训练

    • 您的自动编码器层不对称
    • 不要使用 sigmoid,使用 ReLU
    • 使用更好的初始化技术(具体分布取决于激活函数)
    • 共享编码器和解码器层的权重

    【讨论】:

    • 1.如果我希望输出是线性的并且第一个隐藏层是线性的,您对这些层的建议是什么? 3. 你对 sigmoid、linear、ReLU 有什么推荐? 4. 你什么意思?在 SO 上分享它们?
    • 2.为什么我应该使用 ReLU 而不是 sigmoid?
    • ReLU 已被证明比 sigmoid 更容易训练。我建议您学习这个非常好的资源,以便成功开发神经网络; deeplearningbook.org
    • 如何使用其他初始化程序进行初始化?我读到使用 xavier 初始化程序是个好主意。我找到了tensorflow.org/api_docs/python/tf/contrib/layers/…。如何在我的设置中使用它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 2018-09-19
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 2018-11-12
    相关资源
    最近更新 更多