Tensorflow梯度带返回无

时间:2019-10-03 19:44:56

标签: python tensorflow

我正在将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)

1 个答案:

答案 0 :(得分:1)

您需要观看x。对于此上下文管理器内部的操作,需要至少监视其输入之一。

with tf.GradientTape() as g:
    g.watch(x)
    value = tf.reduce_sum(scales * (x - minimum) ** 2)