6
私はPython API for Tensorflowを使用しています。私は、Pythonのループを使用せずに下記のRosenbrock functionを実装しようとしています:Tensorflowでwhileループを理解する
次のように私の現在の実装は次のとおりです。
def rosenbrock(data_tensor):
columns = tf.unstack(data_tensor)
summation = 0
for i in range(1, len(columns) - 1):
first_term = tf.square(tf.subtract(columns[i + 1], tf.square(columns[i])))
second_term = tf.square(tf.subtract(columns[i], 1.0))
summation += tf.add(tf.multiply(100.0, first_term), second_term)
return summation
私はtf.while_loop()
で和を実装しようとしています。しかし、データとは別のインデックスの整数を使用する場合、APIはやや直感的ではないことがわかりました。 documentationに示す例では、インデックス(またはその逆)のようなデータを使用する:
i = tf.constant(0)
c = lambda i: tf.less(i, 10)
b = lambda i: tf.add(i, 1)
r = tf.while_loop(c, b, [i])
forループを使用するのが適切ですか? while_loopを使用する利点は何ですか?それとも必要ですか? – lerner
上記のコードでは、forループはPythonコードを実行します。私たちがforループの本体を "f"と呼んだ場合、Pythonコードをf、f、f、f、f、... fのように考えることができます。だから、それは "ボディ"関数をN回呼び出すので、関数のグラフはその関数をN回持つことになります。 tf.while_loopを使用すると、その関数はグラフ内で1回しか表示されません。 –
tf.while_loopの利点は、1)反復を並行して実行できること、2)条件文に実行時定数を持たせることができることです。たとえば、一定の許容値が満たされるまで最適化を実行する場合、pythonは最初に条件 –