从张量流图中访问中间结果

时间:2016-07-27 16:58:50

标签: tensorflow

如果我有一个复杂的表格计算

tmp1 = tf.fun1(placeholder1,placeholder2)
tmp2 = tf.fun2(tmp1,placeholder3)
tmp3 = tf.fun3(tmp2)
ret  = tf.fun4(tmp3)

我计算

ret_vals = sess.run(ret,feed_dict={placeholder1: vals1, placeholder2: vals2, placeholder3: vals3}) 

fun1,fun2等可能会对大量数据进行昂贵的操作。

如果我按上述方式运行ret_vals,是否可以稍后或同时访问中间值,而无需重新运行所有值到该值?例如,要获得tmp2,我可以使用

重新运行所有内容
tmp2_vals = sess.run(tmp2,feed_dict={placeholder1: vals1, placeholder2: vals2, placeholder3: vals3})

但这看起来完全是对计算的浪费?有没有办法在执行一次运行后访问图表中的几个中间结果?

我想要这样做的原因是为了在计算ret_vals时调试或测试或记录进度,例如在优化循环中。我运行ret_vals计算的每一步都很昂贵,但我希望看到一些计算出来的中间结果。

如果我做的话

tmp2_vals, ret_vals = sess.run([tmp2, ret], ...)

这是否可以保证图形只会运行一次(而不是一次运行tmp2,一次运行一次)就像我想要的那样?

1 个答案:

答案 0 :(得分:0)

你看过tf.Print了吗?这是一个带打印功能的身份操作。您可以在tmp2之后立即将其插入图表中以获取其值。请注意,默认设置仅允许您打印张量的前n个值,您可以通过将属性#include <iostream> #include <fstream> using namespace std; int main () { ifstream inFile ("input.txt"); if (inFile.fail()) { cout << "Could Not Open File\n"; } else { cout << "File opened succesfully\n"; } } 赋予操作来修改值n。