我想使用TensorFlow的梯度下降優化器來解決二維Rosenbrock函數,但是當我運行該程序時,優化程序有時會走向無窮大。有時候,沒有改變任何東西,它可以找到合適的鄰居,但不能找出最佳的解決方案。如何使用TensorFlow梯度下降優化器來解決優化問題
我的代碼如下:
import tensorflow as tf
x1_data = tf.Variable(initial_value=tf.random_uniform([1], -10, 10),name='x1')
x2_data = tf.Variable(initial_value=tf.random_uniform([1], -10, 10), name='x2')
y = tf.add(tf.pow(tf.sub(1.0, x1_data), 2.0),
tf.mul(100.0, tf.pow(tf.sub(x2_data, tf.pow(x1_data, 2.0)), 2.0)), 'y')
opt = tf.train.GradientDescentOptimizer(0.0035)
train = opt.minimize(y)
sess = tf.Session()
init = tf.initialize_all_variables()
sess.run(init)
for step in xrange(200):
sess.run(train)
if step % 10 == 0:
print(step, sess.run(x1_data), sess.run(x2_data), sess.run(y))
的的ROSENBROCK問題被定義爲y =(1 - X1)^ 2 + 100 *(X2 - X1^2)^ 2,在給予的最佳解決方案x1 = x2 = 1
我在做什麼錯?或者我完全誤解了如何使用TensorFlow?
啊限制搜索空間。我也在想,但不知道該怎麼做。謝謝! –