gpt4 book ai didi

python - 理解 Tensorflow 中的 while 循环

转载 作者:太空狗 更新时间:2023-10-29 20:15:10 24 4
gpt4 key购买 nike

我正在使用 Python API for Tensorflow .我正在尝试实现 Rosenbrock function下面给出了不使用 Python 循环的情况:

Rosenbrock function

我目前的实现如下:

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])

最佳答案

这可以使用 tf.while_loop() 和标准 tuples 来实现根据 documentation 中的第二个示例.

def rosenbrock(data_tensor):
columns = tf.unstack(data_tensor)

# Track both the loop index and summation in a tuple in the form (index, summation)
index_summation = (tf.constant(1), tf.constant(0.0))

# The loop condition, note the loop condition is 'i < n-1'
def condition(index, summation):
return tf.less(index, tf.subtract(tf.shape(columns)[0], 1))

# The loop body, this will return a result tuple in the same form (index, summation)
def body(index, summation):
x_i = tf.gather(columns, index)
x_ip1 = tf.gather(columns, tf.add(index, 1))

first_term = tf.square(tf.subtract(x_ip1, tf.square(x_i)))
second_term = tf.square(tf.subtract(x_i, 1.0))
summand = tf.add(tf.multiply(100.0, first_term), second_term)

return tf.add(index, 1), tf.add(summation, summand)

# We do not care about the index value here, return only the summation
return tf.while_loop(condition, body, index_summation)[1]

重要的是要注意索引增量应该发生在类似于标准 while 循环的循环体中。在给出的解决方案中,它是 body() 函数返回的元组中的第一项。

此外,循环条件函数必须为求和分配一个参数,尽管在这个特定示例中没有使用它。

关于python - 理解 Tensorflow 中的 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43792961/

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