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
Ho scritto un’estensione Jupyter per l’integrazione del tensore. Può:
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:
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