Un modo semplice per visualizzare un grafico TensorFlow in Jupyter?

Il modo ufficiale per visualizzare un grafico TensorFlow è con TensorBoard, ma a volte voglio solo dare una rapida occhiata al grafico quando lavoro in Jupyter.

Esiste una soluzione rapida, idealmente basata su strumenti TensorFlow o pacchetti SciPy standard (come matplotlib), ma se necessario basata su librerie di terze parti?

Ecco una ricetta che ho copiato da uno dei quaderni dei sogni di Alex Mordvintsev ad un certo punto

from IPython.display import clear_output, Image, display, HTML def strip_consts(graph_def, max_const_size=32): """Strip large constant values from graph_def.""" strip_def = tf.GraphDef() for n0 in graph_def.node: n = strip_def.node.add() n.MergeFrom(n0) if n.op == 'Const': tensor = n.attr['value'].tensor size = len(tensor.tensor_content) if size > max_const_size: tensor.tensor_content = ""%size return strip_def def show_graph(graph_def, max_const_size=32): """Visualize TensorFlow graph.""" if hasattr(graph_def, 'as_graph_def'): graph_def = graph_def.as_graph_def() strip_def = strip_consts(graph_def, max_const_size=max_const_size) code = """   
""".format(data=repr(str(strip_def)), id='graph'+str(np.random.rand())) iframe = """ """.format(code.replace('"', '"')) display(HTML(iframe))

Quindi per visualizzare il grafico corrente

 show_graph(tf.get_default_graph().as_graph_def()) 

Se il tuo grafico è salvato come pbtxt, puoi farlo

 gdef = tf.GraphDef() from google.protobuf import text_format text_format.Merge(open("tf_persistent.pbtxt").read(), gdef) show_graph(gdef) 

Vedrai qualcosa di simile

inserisci la descrizione dell'immagine qui

Ho scritto un’estensione Jupyter per l’integrazione del tensore. Può:

  1. Avvia il tensore semplicemente facendo clic su un pulsante in Jupyter
  2. Gestisci più istanze di torsione.
  3. Perfetta integrazione con l’interfaccia Jupyter.

Github: https://github.com/lspvic/jupyter_tensorboard

Ho scritto un semplice aiutante che avvia un tensore dal taccuino jupyter. Basta aggiungere questa funzione da qualche parte nella parte superiore del tuo notebook

 def TB(cleanup=False): import webbrowser webbrowser.open('http://127.0.1.1:6006') !tensorboard --logdir="logs" if cleanup: !rm -R logs/ 

Quindi esegui TB() ogni volta che hai generato i tuoi riepiloghi. Invece di aprire un grafico nella stessa finestra di jupyter, esso:

  • inizia un tensore
  • apre una nuova scheda con il tensore
  • navigare in questa scheda

Dopo aver finito con l’esplorazione, basta fare clic sulla scheda e interrompere interrompere il kernel. Se vuoi pulire la tua directory di registro, dopo l’esecuzione, esegui TB(1)

Una versione gratuita di Tensorboard / iframes di questa visualizzazione che può essere ingombrata rapidamente

 import pydot from itertools import chain def tf_graph_to_dot(in_graph): dot = pydot.Dot() dot.set('rankdir', 'LR') dot.set('concentrate', True) dot.set_node_defaults(shape='record') all_ops = in_graph.get_operations() all_tens_dict = {k: i for i,k in enumerate(set(chain(*[c_op.outputs for c_op in all_ops])))} for c_node in all_tens_dict.keys(): node = pydot.Node(c_node.name)#, label=label) dot.add_node(node) for c_op in all_ops: for c_output in c_op.outputs: for c_input in c_op.inputs: dot.add_edge(pydot.Edge(c_input.name, c_output.name)) return dot 

che può essere seguito da

 from IPython.display import SVG # Define model tf_graph_to_dot(graph).write_svg('simple_tf.svg') SVG('simple_tf.svg') 

per rendere il grafico come record in un file SVG statico Grafico Tensorflow integrato in Dot