我正在查看一些运行tf.while_loop()
的Tensorflow代码,我有一个问题。该代码作为学习tensorflow.
的实验室的一部分,计算了4级多项式的根。我的问题是为什么特定的打印语句不会输出所有中间值。
代码如下:
import tensorflow as tf
def f(x, w):
return (w[0] + w[1] * x + w[2] * tf.pow(x,2) + w[3] * tf.pow(x,3) + w[4] * tf.pow(x,4) )
def f1(x, w):
return (w[1] + 2. * w[2] * x + 3. * w[3] * tf.pow(x,2) + 4. * w[4] * tf.pow(x,3) )
def f2(x, w):
return (2. * w[2] + 6. * w[3] * x + 12. * w[4] * tf.pow(x,2) )
def fxn_plus_1(xn, w):
return (xn - (2. * f(xn, w) * f1(xn, w) / (2. * tf.square(f1(xn, w)) - f(xn, w) * f2(xn, w))))
def c(x, weights):
return tf.abs(x - fxn_plus_1(x, weights)) > 0.001
def b(x, weights):
x = fxn_plus_1(x, weights)
return x, weights
weights = tf.constant( [-1000., 1., 1. , 5. , 0.1])
x = fxn_plus_1(-10., weights)
out = tf.while_loop(c, b, [x, weights])
with tf.Session() as sess:
x, weights = sess.run(out)
print(x)
输出正确,值为5.575055
。现在,我想看看算法进行过程中循环体b()
的中间值是多少。我将函数b()
更改为以下内容:
def b(x, weights):
x = fxn_plus_1(x, weights)
print(x) ## ADDED PRINT STATEMENT
print(weights)
return x, weights
我得到的回报是:
Tensor("while_4/sub_4:0", shape=(), dtype=float32)
Tensor("while_4/Identity_1:0", shape=(5,), dtype=float32)
5.575055
这似乎为x,weights
的值(而不是实际值)提供了调试输出或图形信息。我不确定如何获得循环以实际打印每个步骤的值。
有什么建议吗? 谢谢。
有关尝试和建议的事情的更新:
评论者之一@ user49593,建议我尝试使用tf.Print()
。
这是代码和输出。我仍然只是获取图形信息,而不是实际的值向量。
def b(x, weights):
x = fxn_plus_1(x, weights)
x = tf.Print(x, [x], message="here: ") #CHANGED TO tf.Print STATEMENT
return x, weights
输出仍然仅为5.575055
。没有中间值的向量。
答案 0 :(得分:0)
@ user49593确实找到了这个问题的答案。问题在于Jupyter笔记本不显示打印语句的输出。因此,为了查看输出,您需要将代码放入文件中,然后从命令行运行它。
因此,如果我将上面的代码包装到名为equation.py
的文件中。然后,我将转到命令行并键入。
python equation.py
这将产生预期的输出。看来还有另一则与此相关的SE帖子,可能还有一些其他见解。
Is there a way to get tensorflow tf.Print output to appear in Jupyter Notebook output