print("\ncomputed 1")
x=tfe.Variable(np.random.uniform(size=[166,]), name='x', dtype=tf.float64)
print(compute_cost(tf.constant(normed_data[:10], dtype=tf.float64), x))
print("\ncomputed 2")
x=tfe.Variable(np.random.uniform(size=[166,]), name='x', dtype=tf.float64)
print(compute_cost(tf.constant(normed_data[:10], dtype=tf.float64), x))
print("\ncomputed 0")
x=tfe.Variable(np.zeros((166,)), name='x', dtype=tf.float64)
print(compute_cost(tf.constant(normed_data[:10], dtype=tf.float64), x))
print("\ncomputed 0")
x=tfe.Variable(np.zeros((166,)), name='x', dtype=tf.float64)
print(compute_cost(tf.constant(normed_data[:10], dtype=tf.float64), x))
输出:
computed 1
tf.Tensor(0.00627350861776064, shape=(), dtype=float64)
computed 2
tf.Tensor(0.0032756996843633264, shape=(), dtype=float64)
computed 0
tf.Tensor(19.318829784931626, shape=(), dtype=float64)
computed 0
tf.Tensor(19.318829784931626, shape=(), dtype=float64)
显然,tfe.Variable x正在影响损失函数,因此梯度不应为None / 0。但这是...
x=tfe.Variable(np.random.uniform(size=[166,]), name='x', dtype=tf.float64)
f_grad = tfe.gradients_function(lambda s: compute_cost(tf.constant(normed_data[:10], dtype=tf.float64), s), params=['s'])
print("\nGradient " + str(f_grad(x)))
输出:
Gradient [None]
有人可以解释出什么问题吗?使用Tensorflow 1.10.1并渴望执行。
答案 0 :(得分:1)
返回None
的值表示函数的输出与变量之间没有依赖关系。
查看链接到I see a numpy operation (np.log
) in there的compute_cost
函数,这将打破可区分操作的“痕迹”。请注意,TensorFlow只能通过TensorFlow操作来计算梯度。
类似于your other question,用相应的TensorFlow一个(tf.log
)替换numpy操作应该可以解决问题。
希望有帮助。