Using names = [n.name for n in graph.as_graph_def().node]
I can get all the node names in the graph.
For instance, say this prints:
['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']
How can I select only the operations or only the tensors?
I'm aware of the following workarounds, which will work in specific situations but are not general enough and would not scale to a large graph:
string manipulations from the above names
for instance to get
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]
- As you can imagine this may be very error prone and is very tensor specific
try/except
I could get the tensors which are outputs of these operation with:tensors = [] for name in names: try: tensors.append(graph.get_tensor_by_name(name + ":0")) except KeyError: pass
- But again this is but a workaround and does not solve the selection problem: what if I just want the
kernel
Tensor?
- But again this is but a workaround and does not solve the selection problem: what if I just want the