Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow自动编码器:如何获得代表性输出? 安装程序_Python_Machine Learning_Tensorflow_Computer Vision_Autoencoder - Fatal编程技术网

Python Tensorflow自动编码器:如何获得代表性输出? 安装程序

Python Tensorflow自动编码器:如何获得代表性输出? 安装程序,python,machine-learning,tensorflow,computer-vision,autoencoder,Python,Machine Learning,Tensorflow,Computer Vision,Autoencoder,我用Tensorflow为图像构建了一个自动编码器。我的图像的长度和宽度都在30像素左右。我使用5层: 输入层 具有256个神经元的编码器层,具有线性函数。(该层的功能类似于预处理PCA。) 编码层有128个具有乙状结肠功能的神经元 解码层,256个神经元,具有S形函数 解码器/输出层具有与线性函数输入相同数量的神经元 所有图层都使用偏移,定义如下 layer_1 = tf.nn.sigmoid(tf.add( tf.matmul(x, tf.Variable(tf.random_norm

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

  • 输入层
  • 具有256个神经元的编码器层,具有线性函数。(该层的功能类似于预处理PCA。)
  • 编码层有128个具有乙状结肠功能的神经元
  • 解码层,256个神经元,具有S形函数
  • 解码器/输出层具有与线性函数输入相同数量的神经元
  • 所有图层都使用偏移,定义如下

    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
    ,得到了

    由于我在培训期间的成本很高,并且没有改变,所以我遵循了AdamOptimizer的建议并使用了
    AdamOptimizer
    。事实上,我在考试中取得了更好的成绩

    虽然成本较低,但在各个时代,成本仍保持不变:

    此外,输出图像非常暗。我相信这也可能是我的
    rmse
    s不符合我预期的原因:

    0.4642, 0.2669, 0.4976, 0.4378, 0.4753, 0.4688, 0.4615, 0.4571, 0.4691, 0.4487
    
    请注意,由于第一个图像在中间和第二个图像中是暗的,所以我希望第一个图像的<代码> RMSE < /代码> s是高的。我猜
    rmse
    s不如预期的原因是输出图像太暗

    问题
  • 为什么各个时代的成本都没有下降?我该怎么做才能让这一切顺利进行
  • 为什么输出图像如此黑暗,我能做些什么使它们更好地表示输入图像
  • 如何使
    rmse
    s达到我预期的效果

  • 你的人际网络显然不是在训练

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

    1。如果我希望输出是线性的,并且第一个隐藏层是线性的,那么您对层的建议是什么?3.你推荐什么治疗乙状结肠、线形和ReLU?4.什么意思?在网上分享吗。为什么我应该使用ReLU而不是sigmoid?事实证明,ReLU比sigmoid更容易训练。我建议你学习这个非常好的资源,以便成功地开发神经网络;deeplearningbook.org如何使用其他初始化器初始化?我读到使用xavier初始化器是个好主意。我找到了。如何在设置中使用它?