В Tensorflow, получить имена всех тензоров в графе
Я создаю нейронные сети с Tensorflow
и skflow
; по какой-то причине я хочу получить значения некоторых внутренних тензоров для данного входа, поэтому я использую myClassifier.get_layer_value(input, "tensorName")
,myClassifier
будучи skflow.estimators.TensorFlowEstimator
.
однако мне трудно найти правильный синтаксис имени тензора, даже зная его имя (и я путаюсь между операцией и тензорами), поэтому я использую tensorboard для построения графика и поиска имени.
есть ли способ перечислить все тензоры в графе без использования тензорной доски?
6 ответов:
можно сделать
[n.name for n in tf.get_default_graph().as_graph_def().node]
кроме того, если вы прототипируете в ноутбуке IPython, вы можете показать график непосредственно в ноутбуке, см.
show_graph
функция в глубоком сне Александра ноутбук
есть способ сделать это немного быстрее, чем в ответе Ярослава с помощью get_operations. Вот краткий пример:
import tensorflow as tf a = tf.constant(1.3, name='const_A') b = tf.Variable(3.1, name='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)
tf.all_variables()
вы можете получить информацию, которую вы хотите.и этот коммит сделано сегодня в TensorFlow узнать, что обеспечивает функцию
get_variable_names
в оценщике, который можно использовать для быстрого извлечения всех имен переменных.
Я думаю, что это тоже будет делать:
print(tf.contrib.graph_editor.get_tensors(tf.get_default_graph()))
но по сравнению с ответами Сальвадо и Ярослава, я не знаю, какой из них лучше.
принятый ответ дает вам только список строк с именами. Я предпочитаю другой подход, который дает вам (почти) прямой доступ к тензорам:
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()]
предыдущие ответы хороши, я просто хотел бы поделиться полезной функцией, которую я написал, чтобы выбрать тензоры из графика:
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) ]
так что если у вас есть график с Ops:
под управлением['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']