由于OP要求张量的列表而不是操作/节点的列表,因此代码应略有不同:
graph = tf.get_default_graph()
tensors_per_node = [node.values() for node in graph.get_operations()]
tensor_names = [tensor.name for tensors in tensors_per_node for tensor in tensors]
0
由于OP要求张量的列表而不是操作/节点的列表,因此代码应略有不同:
graph = tf.get_default_graph()
tensors_per_node = [node.values() for node in graph.get_operations()]
tensor_names = [tensor.name for tensors in tensors_per_node for tensor in tensors]
0
我将尝试总结答案:
获取所有节点:
all_nodes = [n for n in tf.get_default_graph().as_graph_def().node]
它们的类型为tensorflow.core.framework.node_def_pb2.NodeDef
要获得所有操作:
all_ops = tf.get_default_graph().get_operations()
它们的类型为tensorflow.python.framework.ops.Operation
要获取所有变量:
all_vars = tf.global_variables()
它们的类型为tensorflow.python.ops.resource_variable_ops.ResourceVariable
最后,回答这个问题, 得到所有张量 :
all_tensors = [tensor for op in tf.get_default_graph().get_operations() for tensor in op.values()]
它们的类型为tensorflow.python.framework.ops.Tensor
0
先前的答案很好,我只想分享我编写的从图中选择张量的实用函数:
def get_graph_op(graph, and_conds=None, op='and', or_conds=None):
"""Selects nodes' names in the graph if:
- The name contains all items in and_conds
- OR/AND depending on op
- The name contains any item in or_conds
Condition starting with a "!" are negated.
Returns all ops if no optional arguments is given.
Args:
graph (tf.Graph): The graph containing sought tensors
and_conds (list(str)), optional): Defaults to None.
"and" conditions
op (str, optional): Defaults to 'and'.
How to link the and_conds and or_conds:
with an 'and' or an 'or'
or_conds (list(str), optional): Defaults to None.
"or conditions"
Returns:
list(str): list of relevant tensor names
"""
assert op in {'and', 'or'}
if and_conds is None:
and_conds = ['']
if or_conds is None:
or_conds = ['']
node_names = [n.name for n in graph.as_graph_def().node]
ands = {
n for n in node_names
if all(
cond in n if '!' not in cond
else cond[1:] not in n
for cond in and_conds
)}
ors = {
n for n in node_names
if any(
cond in n if '!' not in cond
else cond[1:] not in n
for cond in or_conds
)}
if op == 'and':
return [
n for n in node_names
if n in ands.intersection(ors)
]
elif op == 'or':
return [
n for n in node_names
if n in ands.union(ors)
]
因此,如果您有带有操作图的图形:
['model/classifier/dense/kernel',
'model/classifier/dense/kernel/Assign',
'model/classifier/dense/kernel/read',
'model/classifier/dense/bias',
'model/classifier/dense/bias/Assign',
'model/classifier/dense/bias/read',
'model/classifier/dense/MatMul',
'model/classifier/dense/BiasAdd',
'model/classifier/ArgMax/dimension',
'model/classifier/ArgMax']
然后跑步
get_graph_op(tf.get_default_graph(), ['dense', '!kernel'], 'or', ['Assign'])
返回:
['model/classifier/dense/kernel/Assign',
'model/classifier/dense/bias',
'model/classifier/dense/bias/Assign',
'model/classifier/dense/bias/read',
'model/classifier/dense/MatMul',
'model/classifier/dense/BiasAdd']
0
tf.all_variables()
可以为您提供所需的信息。
此外, 这次提交今天作出TensorFlow学习提供了一个功能get_variable_names
的估计,你可以用它来轻松地检索所有的变量名。
0
你可以做
[n.name for n in tf.get_default_graph().as_graph_def().node]
另外,如果要在IPython笔记本中进行原型制作,则可以直接在笔记本中显示图形,请参见Alexander's Deep Dream 笔记本中的 show_graph
函数
0
接受的答案仅会为您提供带有名称的字符串列表。我更喜欢另一种方法,它使您(几乎)直接访问张量:
graph = tf.get_default_graph()
list_of_tuples = [op.values() for op in graph.get_operations()]
list_of_tuples
现在包含每个张量,每个张量都在一个元组中。您也可以对其进行调整以直接获得张量:
graph = tf.get_default_graph()
list_of_tuples = [op.values()[0] for op in graph.get_operations()]
0
有一种方法可以通过使用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))
0
我认为这样做也可以:
print(tf.contrib.graph_editor.get_tensors(tf.get_default_graph()))
但是,与萨尔瓦多和雅罗斯拉夫的答案相比,我不知道哪个更好。
0
我正在用
Tensorflow
和skflow
创建神经网络;由于某种原因,我想获取给定输入的某些内部张量的值,因此我正在使用myClassifier.get_layer_value(input, "tensorName")
,myClassifier
是skflow.estimators.TensorFlowEstimator
。但是,我发现很难找到张量名称的正确语法,即使知道它的名称也很困难(而且我对操作和张量感到困惑),因此我使用张量板来绘制图形并寻找名称。
有没有一种方法可以在不使用张量板的情况下枚举图中的所有张量?