在Tensorflow中,获取图表中所有张量的名称

P. *_*eri 101 python tensorflow tensorboard skflow

我用Tensorflow和创造神经网络skflow; 出于某种原因,我想获得给定输入的一些内部张量的值,所以我正在使用myClassifier.get_layer_value(input, "tensorName"),myClassifier作为一个skflow.estimators.TensorFlowEstimator.

但是,我发现很难找到张量名称的正确语法,即使知道它的名字(我在操作和张量之间感到困惑),所以我使用tensorboard绘制图形并查找名称.

有没有办法在不使用张量板的情况下枚举图中的所有张量?

Yar*_*tov 180

你可以做

[n.name for n in tf.get_default_graph().as_graph_def().node]
Run Code Online (Sandbox Code Playgroud)

另外,如果您在IPython笔记本中进行原型设计,可以直接在笔记本中显示图形,请参阅show_graphAlexander的Deep Dream 笔记本中的功能

  • 您可以通过在理解的末尾在n.op中添加if if“ Variable”来过滤变量。 (2认同)
  • 上面的命令产生所有操作/节点的名称。要获取所有张量的名称,请执行以下操作:tensors_per_node = [graph.get_operations()中节点的node.values()] tensor_names = [tensors_per_node中张量的tensor.name tensor中的张量] (2认同)

Sza*_*lcs 33

我将尝试总结答案:

获取图中的所有节点:(输入tensorflow.core.framework.node_def_pb2.NodeDef

all_nodes = [n for n in tf.get_default_graph().as_graph_def().node]
Run Code Online (Sandbox Code Playgroud)

获取图中的所有操作:(输入tensorflow.python.framework.ops.Operation

all_ops = tf.get_default_graph().get_operations()
Run Code Online (Sandbox Code Playgroud)

获取图中的所有变量:(输入tensorflow.python.ops.resource_variable_ops.ResourceVariable

all_vars = tf.global_variables()
Run Code Online (Sandbox Code Playgroud)

获取图中的所有张量:(输入tensorflow.python.framework.ops.Tensor

all_tensors = [tensor for op in tf.get_default_graph().get_operations() for tensor in op.values()]
Run Code Online (Sandbox Code Playgroud)

获取图表中的所有占位符:(输入tensorflow.python.framework.ops.Tensor

all_placeholders = [placeholder for op in tf.get_default_graph().get_operations() if op.type=='Placeholder' for placeholder in op.values()]
Run Code Online (Sandbox Code Playgroud)

张量流 2

要在 Tensorflow 2 中获取图形,tf.get_default_graph()您不需要先实例化 atf.function并访问该graph属性,例如:

graph = func.get_concrete_function().graph
Run Code Online (Sandbox Code Playgroud)

哪里functf.function

  • 请注意 TF2 版本! (3认同)

Sal*_*ali 23

通过使用get_operations,有一种方法可以比Yaroslav的答案稍快一些.这是一个简单的例子:

import tensorflow as tf

a = tf.constant(1.3, name='const_a')
b = tf.Variable(3.1, name='variable_b')
c = tf.add(a, b, name='addition')
d = tf.multiply(c, a, name='multiply')

for op in tf.get_default_graph().get_operations():
    print(str(op.name))
Run Code Online (Sandbox Code Playgroud)

  • 您无法使用 `tf.get_operations()` 获取张量。只有操作你才能得到。 (3认同)

Yua*_*ang 11

tf.all_variables() 可以为您提供所需的信息.

此外,今天在TensorFlow Learn中提交的提交get_variable_names在估算器中提供了一个函数,您可以使用该函数轻松检索所有变量名称.

  • 这只取得变量,而不是张量. (11认同)
  • ......它的继承者是`tf.global_variables()` (8认同)
  • 该函数已被弃用 (2认同)

小智 5

我认为这样做也可以:

print(tf.contrib.graph_editor.get_tensors(tf.get_default_graph()))
Run Code Online (Sandbox Code Playgroud)

但是,与萨尔瓦多和雅罗斯拉夫的答案相比,我不知道哪个更好。


Pic*_*ard 5

接受的答案只会为您提供一个包含名称的字符串列表.我更喜欢一种不同的方法,它可以(几乎)直接访问张量:

graph = tf.get_default_graph()
list_of_tuples = [op.values() for op in graph.get_operations()]
Run Code Online (Sandbox Code Playgroud)

list_of_tuples现在包含每个张量,每个张量都在一个元组内.您也可以调整它以直接获得张量:

graph = tf.get_default_graph()
list_of_tuples = [op.values()[0] for op in graph.get_operations()]
Run Code Online (Sandbox Code Playgroud)