tf.while_loop()如何在tensorflow中执行它的主体部分

时间:2019-05-10 14:11:10

标签: tensorflow

FALSE

我希望结果是

DGE_tables <- list(structure(list(column1 = c("to_delete", "to_keep"), 
   column2 = c(56L, 
45L)), class = "data.frame", row.names = c("1", "2")), structure(list(
    column1 = c("to_delete", "to_keep"), column2 = c(78L, 27L
    )), class = "data.frame", row.names = c("1", "2")))

但是,结果是

import tensorflow as tf

n = tf.constant(3)
a = tf.constant(0)

def cond(a, n):
    return a < n

def body(a, n):
    print("box")
    return a+1, n

with tf.Session() as sess:
    tf.global_variables_initializer().run()
    a, n = tf.while_loop(cond, body, [a, n])
    res = sess.run([a, n])
    print(res)



box box box [10, 10] 函数似乎只执行一次。
但是,如果是这样,那么结果应该是box [10, 10] ,而不是body

我想知道为什么它看起来像这样,而while_loop如何执行其主体部分。

1 个答案:

答案 0 :(得分:0)

创建图形后,它将打印一次。创建图形后,在执行过程中,没有要打印的操作。如果要在执行阶段进行打印,则必须明确指定要打印的操作。例如:

import tensorflow as tf

n = tf.constant(3)
a = tf.constant(0)

def cond(a, n):
    return a < n

def body(a, n):
    return tf.Print(a + 1, [], message='box'), n # <-- op for increment and print

a, n = tf.while_loop(cond, body, [a, n])

with tf.Session() as sess:

    res = sess.run([a, n])
    print(res)
# box
# box
# box
# [3, 3]

tf.Print()文档中的注释:

  

注意:此op打印到标准错误。目前不兼容     使用jupyter笔记本(打印到笔记本服务器的输出,而不是     笔记本)。