Python 导致收缩型自动编码器成本的张量流梯度不';t收敛
为了构造一个压缩式自动编码器,我们使用一个具有成本函数的普通自动编码器 为了使用MNIST数据集实现这一点,我使用tensorflow定义了成本函数Python 导致收缩型自动编码器成本的张量流梯度不';t收敛,python,tensorflow,mnist,autoencoder,Python,Tensorflow,Mnist,Autoencoder,为了构造一个压缩式自动编码器,我们使用一个具有成本函数的普通自动编码器 为了使用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 并使用AdamOp
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,这是很奇怪的。我对成本函数的实现是否不正确
编辑:
在读取了ontf.gradients
之后,上述实现将计算
相反所以我的问题是,如何在张量流中进行导数分量分析 解决编辑后的问题:TensorFlow没有计算雅可比数的函数。以下引用自a,概述了如何计算雅可比矩阵: 目前,您可以通过多次调用梯度来计算(比如)向量的雅可比矩阵,对于原始向量的每个标量分量(通过切片获得)调用一个梯度,然后重新组合结果
正如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)
给