我使用Tensorflow为图像构建了一个自动编码器。我的图像长度和宽度约为30像素。我正在使用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
。确实,我用
虽然成本较低,但它们在时代期间仍然保持不变:
输出图像也很暗。我相信这也可能是我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
成为我所期待的?答案 0 :(得分:0)
您的网络显然没有接受培训