graficos graficas graficar grafica escala ejes crear coordenadas cambiar python tensorflow tensorboard skflow

python - graficas - En Tensorflow, obtenga los nombres de todos los tensores en un gráfico



matplotlib ejes (9)

Como el OP solicitó la lista de los tensores en lugar de la lista de operaciones / nodos, el código debería ser ligeramente diferente:

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]

Estoy creando redes neuronales con Tensorflow y skflow ; por alguna razón, quiero obtener los valores de algunos tensores internos para una entrada dada, por lo que estoy usando myClassifier.get_layer_value(input, "tensorName") , myClassifier es un skflow.estimators.TensorFlowEstimator .

Sin embargo, me resulta difícil encontrar la sintaxis correcta del nombre del tensor, incluso sabiendo su nombre (y me estoy confundiendo entre la operación y los tensores), así que estoy usando el tensorboard para trazar el gráfico y buscar el nombre.

¿Hay alguna manera de enumerar todos los tensores en un gráfico sin usar el tensorboard?


Creo que esto también lo hará:

print(tf.contrib.graph_editor.get_tensors(tf.get_default_graph()))

Pero en comparación con las respuestas de Salvado y Yaroslav, no sé cuál es mejor.


Esto funcionó para mí:

all_tensors = [tensor for op in tf.get_default_graph().get_operations() for tensor in op.values()]


Hay una manera de hacerlo un poco más rápido que en la respuesta de Yaroslav usando get_operations . Aquí hay un ejemplo rápido:

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))


La respuesta aceptada solo le brinda una lista de cadenas con los nombres. Prefiero un enfoque diferente, que le da (casi) acceso directo a los tensores:

graph = tf.get_default_graph() list_of_tuples = [op.values() for op in graph.get_operations()]

list_of_tuples ahora contiene cada tensor, cada uno dentro de una tupla. También puede adaptarlo para obtener los tensores directamente:

graph = tf.get_default_graph() list_of_tuples = [op.values()[0] for op in graph.get_operations()]


Las respuestas anteriores son buenas, me gustaría compartir una función de utilidad que escribí para seleccionar tensores de un gráfico:

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) ]

Entonces, si tiene un gráfico con operaciones:

[''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'']

Entonces corriendo

get_graph_op(tf.get_default_graph(), [''dense'', ''!kernel''], ''or'', [''Assign''])

devoluciones:

[''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'']


Trataré de resumir las respuestas:

Para obtener todos los nodos:

for n in tf.get_default_graph().as_graph_def().node: print(''/n'',n)

Estos tienen el tipo tensorflow.core.framework.node_def_pb2.NodeDef

Para obtener todas las operaciones:

all_nodes = [n for n in tf.get_default_graph().as_graph_def().node]

Estos tienen el tipo tensorflow.python.framework.ops.Operation

Para obtener todas las variables:

all_ops = tf.get_default_graph().get_operations()

Estos tienen el tipo tensorflow.python.ops.resource_variable_ops.ResourceVariable

Y finalmente, para responder la pregunta, para obtener todos los tensores :

all_vars = tf.global_variables()

Estos tienen el tipo tensorflow.python.framework.ops.Tensor


Tu puedes hacer

[n.name for n in tf.get_default_graph().as_graph_def().node]

Además, si está show_graph prototipos en una computadora portátil IPython, puede mostrar el gráfico directamente en la computadora portátil, consulte la función show_graph en la notebook Deep Dream de Alexander


tf.all_variables() puede obtener la información que desea.

Además, esta confirmación realizada hoy en TensorFlow Learn que proporciona una función get_variable_names en el estimador que puede usar para recuperar todos los nombres de variables fácilmente.