使用 names = [n.name for n in graph.as_graph_def().node] 我可以获得图中的所有节点名称。
例如,假设打印出:
['model/classifier/dense/kernel/Initializer/random_uniform/shape',
'model/classifier/dense/kernel/Initializer/random_uniform/min',
'model/classifier/dense/kernel/Initializer/random_uniform/max',
'model/classifier/dense/kernel/Initializer/random_uniform/RandomUniform',
'model/classifier/dense/kernel/Initializer/random_uniform/sub',
'model/classifier/dense/kernel/Initializer/random_uniform/mul',
'model/classifier/dense/kernel/Initializer/random_uniform',
'model/classifier/dense/kernel',
'model/classifier/dense/kernel/Assign',
'model/classifier/dense/kernel/read',
'model/classifier/dense/bias/Initializer/zeros/shape_as_tensor',
'model/classifier/dense/bias/Initializer/zeros/Const',
'model/classifier/dense/bias/Initializer/zeros',
'model/classifier/dense/bias',
'model/classifier/dense/bias/Assign',
'model/classifier/dense/bias/read',
'model/classifier/dense/MatMul',
'model/classifier/dense/BiasAdd']
如何只选择操作或只选择张量?
我知道以下解决方法,它们在特定情况下有效,但不够通用,无法扩展到大图:
对上述名称的字符串操作
例如获取
model/classifier/dense/kernel:tensor = [graph.get_tensor_by_name(n + ":0") for n in names if 'classifier' in n and 'kernel' in name and not n.split('kernel')[-1] ][0]- 正如您所想象的那样,这可能非常容易出错并且非常特定于张量
try/except我可以获得作为这些操作输出的张量:tensors = [] for name in names: try: tensors.append(graph.get_tensor_by_name(name + ":0")) except KeyError: pass- 但这只是一种解决方法,并没有解决选择问题:如果我只想要
kernel张量怎么办?
- 但这只是一种解决方法,并没有解决选择问题:如果我只想要
请您参考如下方法:
如果您想更好地感受操作和节点,请尝试运行 tensorboard。 您可以使用 tf.summary.FileWriter("folder_name", sess.graph) 编写摘要文件。
我的 tensorflow 知识有限,但我认为张量名称和运算符名称几乎相同。一个算子可以有多个输出,这些输出中的每一个都称为张量。因此,张量名称只是 operator_name:output_index,output_index 通常是 0,因为大多数运算符只有一个输出。 所以给运行 sess.graph.get_tensor_by_name("model/classifier/dense/kernel/Initializer/random_uniform/mul:0") 一个机会。不过,我不确定使用这么长的名称是否实用。
抱歉,如果提供的信息不是 100% 正确,我只是一个初学者。
