gpt4 book ai didi

python - 如何使用 TensorFlow 找到函数的最小值

转载 作者:太空宇宙 更新时间:2023-11-03 10:53:47 25 4
gpt4 key购买 nike

我尝试在 TensorFlow 中实现优化算法的可视化。

因此我从 Beale 函数开始

Baele's function Baele's function

全局最小值在

global minimum

Beale 函数图看起来确实像这样 plot of Baele's function

我想从点f(x=3.0, y=4.0)开始

如何使用优化算法在 TensorFlow 中实现这一点?

我的第一次尝试是这样的

import tensorflow as tf

# Beale's function
x = tf.Variable(3.0, trainable=True)
y = tf.Variable(4.0, trainable=True)
f = tf.add_n([tf.square(tf.add(tf.subtract(1.5, x), tf.multiply(x, y))),
tf.square(tf.add(tf.subtract(2.25, x), tf.multiply(x, tf.square(y)))),
tf.square(tf.add(tf.subtract(2.625, x), tf.multiply(x, tf.pow(y, 3))))])

Y = [3, 0.5]

loss = f
opt = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

sess = tf.Session()
sess.run(tf.global_variables_initializer())

for i in range(100):
print(sess.run([x, y, loss]))
sess.run(opt)

显然这行不通。我想我必须定义一个正确的损失,但是如何定义呢?澄清一下:我的问题是我不了解 TensorFlow 是如何工作的,而且我对 python 了解不多(来自 Java、C、C++、Delphi 等)。我的问题不是它如何工作以及最佳优化方法是什么,它只是关于如何以正确的方式实现它。

最佳答案

哦,我已经想通了。问题是我需要将 x 和 y 的最大值和最小值限制为 -4.5 和 4.5,这样它们就不会爆炸到无穷大。

此解决方案有效:

import tensorflow as tf

# Beale's function
x = tf.Variable(3.0, trainable=True)
y = tf.Variable(4.0, trainable=True)
f = tf.add_n([tf.square(tf.add(tf.subtract(1.5, x), tf.multiply(x, y))),
tf.square(tf.add(tf.subtract(2.25, x), tf.multiply(x, tf.square(y)))),
tf.square(tf.add(tf.subtract(2.625, x), tf.multiply(x, tf.pow(y, 3))))])

opt = tf.train.GradientDescentOptimizer(0.01)
grads_and_vars = opt.compute_gradients(f, [x, y])
clipped_grads_and_vars = [(tf.clip_by_value(g, -4.5, 4.5), v) for g, v in grads_and_vars]

train = opt.apply_gradients(clipped_grads_and_vars)

sess = tf.Session()
sess.run(tf.global_variables_initializer())

for i in range(100):
print(sess.run([x, y]))
sess.run(train)

如果有人知道是否可以在此代码中添加多个神经元/层,请随时写下答案。

关于python - 如何使用 TensorFlow 找到函数的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45249476/

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