gpt4 book ai didi

python - 最小化 Tensorflow 中的函数

转载 作者:行者123 更新时间:2023-12-02 03:25:31 24 4
gpt4 key购买 nike

如何使用 tf.gradients 获取函数的梯度?当我使用 GradientDescentOptimizer.minimize() 时,下面的代码有效,tf.gradients 似乎在 x^2+2 的导数处评估 1,即 2x

我错过了什么?

x = tf.Variable(1.0, trainable=True)
y = x**2 + 2

grad = tf.gradients(y, x)
#grad = tf.train.GradientDescentOptimizer(0.1).minimize(y)

init = tf.global_variables_initializer()

with tf.Session() as sess:
sess.run(init)
grad_value = sess.run(grad)
print(grad_value)

最佳答案

如果我正确理解您的问题,您想要找到使 x^2 + 2 最小化的 x 值。

为此,您需要重复调​​用 GradientDescentOptimizer 直到 x 收敛到使函数最小化的值。这是因为梯度下降是一种迭代技术。

此外,在tensorflow中,GradientDescentOptimizer的方法minimize会计算梯度,然后将它们应用到相关变量(x in你的情况)。因此代码应该如下所示(请注意,我注释了 grad 变量,除非您想查看梯度值,否则不需要该变量):

x = tf.Variable(1.0, trainable=True)
y = x**2 + 2

# grad = tf.gradients(y, x)
grad_op = tf.train.GradientDescentOptimizer(0.2).minimize(y)

init = tf.global_variables_initializer()

n_iterations = 10
with tf.Session() as sess:
sess.run(init)
for i in range(n_iterations):
_, new_x = sess.run([grad_op, x])
print('Iteration:', i,', x:', new_x)

你会得到:

Iteration: 0 , x: 1.0
Iteration: 1 , x: 0.6
Iteration: 2 , x: 0.36
Iteration: 3 , x: 0.216
Iteration: 4 , x: 0.07776
Iteration: 5 , x: 0.07776
Iteration: 6 , x: 0.046656
Iteration: 7 , x: 0.01679616
Iteration: 8 , x: 0.010077696
Iteration: 9 , x: 0.010077696

您会看到它收敛到真实答案 0。

如果将 GradientDescentOptimizer 的学习率从 0.2 提高到 0.4,它将更快地收敛到 0。

编辑

好的,根据我对这个问题的新理解,要手动实现梯度下降,你不能这样做 x = x - alpha *gradient 因为这是 python 操作,它只是替换了对象 x。您需要告诉 Tensorflow 将操作添加到图中,这可以使用 x.assign 来完成。它看起来像:

x = tf.Variable(1.0, trainable=True)
y = x**2 + 2

grad = tf.gradients(y, x)
# grad_op = tf.train.GradientDescentOptimizer(0.5).minimize(y)

update_op = x.assign(x - 0.2*grad[0])

init = tf.global_variables_initializer()

with tf.Session() as sess:
sess.run(init)
for i in range(10):
new_x = sess.run([update_op, x])
print('Iteration:', i,', x:', new_x)

我们得到了与原生GradientDescentOptimizer相同的答案:

Iteration: 0 , x: 1.0
Iteration: 1 , x: 0.6
Iteration: 2 , x: 0.36
Iteration: 3 , x: 0.1296
Iteration: 4 , x: 0.1296
Iteration: 5 , x: 0.077759996
Iteration: 6 , x: 0.046655998
Iteration: 7 , x: 0.027993599
Iteration: 8 , x: 0.01679616
Iteration: 9 , x: 0.010077696

关于python - 最小化 Tensorflow 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53549352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com