Python 如何检索回迁的执行顺序?

Python 如何检索回迁的执行顺序?,python,tensorflow,Python,Tensorflow,给定一个回迁数组,如何检索将在对会话的单个调用中执行的回迁顺序(可能是非唯一的)。运行(回迁)?一个合理的解决方案是在python中重新计算拓扑排序。看起来C++实现没有在Python API中公开。请让我知道,如果有这种情况下不工作 下面是一个例子: import tensorflow as tf from toposort import toposort sess = tf.InteractiveSession() matrix1=tf.constant([[3., 3.]]) mat

给定一个回迁数组,如何检索将在对
会话的单个调用中执行的回迁顺序(可能是非唯一的)。运行(回迁)

一个合理的解决方案是在python中重新计算拓扑排序。看起来C++实现没有在Python API中公开。请让我知道,如果有这种情况下不工作

下面是一个例子:

import tensorflow as tf
from toposort import toposort


sess = tf.InteractiveSession()

matrix1=tf.constant([[3., 3.]])
matrix2=tf.constant([[2.], [2.]])

sum = tf.add(matrix1, matrix2)
product = tf.matmul(matrix1, matrix2)
final = tf.mul(sum, product)

g = sess.graph
deps = {}

for op in g.get_operations():
    # op node
    op_inputs = set()
    op_inputs.update([t.name for t in op.inputs])
    deps[op.name] = op_inputs

    # tensor output node
    for t in op.outputs:
        deps[t.name]={op.name}


随后,我们可以手动逐步完成对图中每个节点的求值-对
Session.run()
的后续调用涉及传递一个
feed\u dict
,该函数累积所有先前输入的结果。这是相当缓慢的,因为C++和NUMPI数据之间的不断的洗牌,内存密集,因为我们缓存所有的输出值。< /P>这个顺序完全取决于图中的依赖关系,并且可以根据节点放置在内核上的方式来改变。你能详细说明一下你想做什么吗?session.run()一步计算多个张量。我正在尝试实现一个调试器,它在计算每个“获取”之后暂停图形执行。这可以通过对连续的fetch ops/TENSOR调用session.run()并将结果放入feed_dict=paramater来实现。棘手的部分是找出哪一个先获取数据进行计算。我试图使此开销与对session.run()的单个调用相同。InteractiveSessions不起作用,因为它们会评估所有依赖项。如果顺序可以根据节点的放置方式而改变,这也没关系——这种行为类似于多线程计算。唯一的期望是,如果fetch对象B上的eval依赖于fetch对象A的eval,那么A将在B之前求值。
deps
{u'Add': {u'Const:0', u'Const_1:0'},
 u'Add:0': {u'Add'},
 u'Const': set(),
 u'Const:0': {u'Const'},
 u'Const_1': set(),
 u'Const_1:0': {u'Const_1'},
 u'MatMul': {u'Const:0', u'Const_1:0'},
 u'MatMul:0': {u'MatMul'},
 u'Mul': {u'Add:0', u'MatMul:0'},
 u'Mul:0': {u'Mul'}}

list(toposort(deps))
[{u'Const', u'Const_1'},
 {u'Const:0', u'Const_1:0'},
 {u'Add', u'MatMul'},
 {u'Add:0', u'MatMul:0'},
 {u'Mul'},
 {u'Mul:0'}]