为了构造一个收缩自动编码器,人们使用具有成本函数的普通自动编码器
为了使用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后,上面的实现就会计算出来
而是。所以我的问题是,你如何在张量流中做出衍生成分?
答案 0 :(得分:1)
解决您的编辑后问题:TensorFlow没有计算雅可比行列式的功能。以下引自Github discussion的描述,描述了如何自己计算雅可比行列式:
目前,您可以通过多次调用渐变来计算矢量的雅可比行列式,通过调用原始矢量的每个标量分量(通过切片获得),并重新组合结果。
答案 1 :(得分:0)
就像Akshay所说的那样,计算雅可比行列式的方法是通过切分微分目标。以下是一个小例子。
f的雅可比矩阵
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)
哪个给出了