导致压缩自动编码器成本的张量流梯度不会收敛

时间:2017-11-30 13:45:06

标签: python tensorflow mnist autoencoder

为了构造一个收缩自动编码器,人们使用具有成本函数的普通自动编码器 enter image description here

为了使用MNIST数据集实现这一点,我使用tensorflow作为

定义了成本函数
def cost(X, X_prime):
    grad = tf.gradients(ys=X_prime, xs=X)
    cost = tf.reduce_mean(tf.square(X_prime - X)) + tf.reduce_mean(tf.square(grad))
    return cost

并使用AdamOptimizer进行反向传播。但是,成本不会低于0.067,这是特殊的。我的成本函数的实现是否不正确?

修改 阅读tf.gradients上的documentation后,上面的实现就会计算出来 而是enter image description here。所以我的问题是,你如何在张量流中做出衍生成分?

2 个答案:

答案 0 :(得分:1)

解决您的编辑后问题:TensorFlow没有计算雅可比行列式的功能。以下引自Github discussion的描述,描述了如何自己计算雅可比行列式:

  

目前,您可以通过多次调用渐变来计算矢量的雅可比行列式,通过调用原始矢量的每个标量分量(通过切片获得),并重新组合结果。

答案 1 :(得分:0)

就像Akshay所说的那样,计算雅可比行列式的方法是通过切分微分目标。以下是一个小例子。

enter image description here

f的雅可比矩阵

enter image description here

tensorflow中的代码

X = tf.Variable(tf.random_normal(shape=(10, 3)), dtype=tf.float32)
y = X[:, :-1]

jacobian = tf.stack([tf.gradients(y[:, i], X) for i in range(2)], axis=2)

sess = tf.Session()
j = sess.run(jacobian)
print(j[:, 0, :])

array([[1., 0., 0.],
       [0., 1., 0.]], dtype=float32)

哪个给出了