私は2次元Rosenbrock関数を解決するためにTensorFlowのグラデーション降下オプティマイザを使用しようとしているが、私はプログラムを実行したとして、オプティマイザは時々無限大の方に行きます。またいつか、何も変更せずに、それは右の近所を見つけるが、最適解を特定することはできません。次のように最適化問題を解決するために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))
ローゼン問題をy =(1 - X1)として定義される^ 2 + 100 *(X2 - X1^2)^ 2、上の最適解を与えますX1 = X2 = 1
私はこれで間違って何をしていますか?あるいは、私はTensorFlowの使い方を完全に誤解していますか?
ああは探索空間を制限します。私はそれも考えていたが、それをどうやって行うのか分からなかった。ありがとう! –