Python Tensorflow自动编码器:如何获得代表性输出? 安装程序
我用Tensorflow为图像构建了一个自动编码器。我的图像的长度和宽度都在30像素左右。我使用5层: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
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
- 使用更好的初始化技术(具体分布取决于激活功能)
- 共享编码器和解码器层的权重