如何在TensorFlow中获取张量值(无需进行其他会话)

时间:2018-07-13 07:48:57

标签: python python-2.7 tensorflow tensor

我正在寻找一种获取张量值的方法。在大多数情况下,可以通过调用“ sess.run(target_op)”解决该问题。但是,我想知道另一种方式。我正在编辑从GitHub下载的代码,因此那里已有一个会话在运行代码。在不接触会话运行部分的情况下,是否有任何方法可以获得特定的张量值?就我而言,该代码旨在提高图像识别的准确性。在运行会话并进行准确性评估时,我还希望在同一会话中获得“预测”张量值,而无需创建另一个会话。例如,类似tf.Print的操作通过终端窗口显示张量值而无需直接运行会话(在第一个图中,我们只需要执行sess.run(e)即可从c打印张量) example of tf.Print

a = tf.constant(5)
b = tf.constant(3)
c = tf.add(a,b)

#print tensor c (which is 8)
d = tf.Print(c,[c])
f = tf.constant(2)
e = tf.multiply(f,d)
sess = tf.Session()

#print operation can be executed without running the session directly
g = sess.run(e)`

像tf.Print一样,是否有任何操作在不直接运行会话的情况下获取张量值? (如第二个数字) example of operation I am looking for

更具体地说,我想要的是获取张量的值(具有实际的数字和数组,而不仅仅是“张量”数据结构),并将其传递给全局变量以即使在会话关闭后也可以自由访问该值。会话仅执行位于图末端的运算符,而我希望该值的张量位于图的中间。由于我无法创建比原始代码更多的会话的限制,有没有办法获取特定的张量值?(我不能使用.eval()或.run(),因为任何一个都需要访问'session'。我正在编辑的代码通过使用slim.evaluate_once函数运行代码,并且由于session()绑定到该函数,因此我无法使用session())

1 个答案:

答案 0 :(得分:1)

只要提供了适当的feed_dict,就没有理由不能仅从图中调用任何张量。例如,假设您想要一个名为biasAdd:0的张量,而您所谓的末端张量称为prediction

然后,您可以获取此张量并对其求值:

tensor = graph.get_tensor_by_name("biasAdd:0")
tensor_value, prediction_value = ses.run([tensor, prediction],... )

在tensorflow中,您必须使用run或eval来从图中获取数值