如果我有一个复杂的表格计算
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,一次运行一次)就像我想要的那样?
答案 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。