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,那麼你只會在圖中看到該函數一次。 –
tf.while_loop的優點是:1)可以並行運行迭代,2)可以在條件語句中使用運行時常量。例如,如果你想運行優化器直到滿足一定的容差,那麼你必須使用tf.while_loop變體,因爲python最初不能評估條件 –