我正在将TensorFlow 1.14.0与Python(3.6.8)结合使用。我正在尝试使用tensorflow_probability的lbfgs优化器实现(documentation/example)。
如果我运行文档中提供的示例代码,则可以正常工作。对于我自己的代码,我尝试遵循相同的过程,该过程使用tf.GradientTape()
方法来计算目标函数。这样做时,渐变会以None
类型返回。
我不明白为什么一个起作用,而另一个不起作用。
编辑:我意识到使用渐变运行急切执行是行不通的,所以我将示例调整为可以急切执行。
急于执行的非工作示例(使用GradientTape)
import numpy as np
import tensorflow as tf
import tensorflow_probability as tfp
tf.enable_eager_execution()
# A high-dimensional quadratic bowl.
ndims = 3
minimum = np.ones([ndims], dtype='float64')
scales = np.arange(ndims, dtype='float64') + 1.0
# The objective function and the gradient.
def quadratic(x):
with tf.GradientTape() as g:
value = tf.reduce_sum(scales * (x - minimum) ** 2)
grads = g.gradient(value, x)
print('Gradients: ')
print(grads)
return value, grads
start = np.arange(ndims, 0, -1, dtype='float64')
optim_results = tfp.optimizer.lbfgs_minimize(quadratic, initial_position=start, num_correction_pairs=10,tolerance=1e-8)
print('results')
print(optim_results)
# Check that the search converged
assert(optim_results.converged)
# Check that the argmin is close to the actual value.
np.testing.assert_allclose(optim_results.position, minimum)
答案 0 :(得分:1)
您需要观看x。对于此上下文管理器内部的操作,需要至少监视其输入之一。
with tf.GradientTape() as g:
g.watch(x)
value = tf.reduce_sum(scales * (x - minimum) ** 2)