2016-07-04 14 views
34

Официальный способ визуализации графика TensorFlow с TensorBoard, но иногда мне просто нужно быстро взглянуть на график, когда я работаю в Jupyter.Простой способ визуализации графика TensorFlow в Jupyter?

Есть ли быстрое решение, идеально основанное на инструментах TensorFlow или стандартных пакетах SciPy (например, matplotlib), но при необходимости на основе сторонних библиотек?

+0

код [DeepDream рецепт] (https: // GitHub.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/deepdream/deepdream.ipynb) работает очень хорошо, но TensorBoard использует для рисования неразборчивый график с внутренними дополнительными узлами. Добавления TensorFlow запускают его операции. Чтобы улучшить удобочитаемость, я написал статью (https://medium.com/@Pasky/teasing-out-tensorflow-graph-mess-64cf5ece4b00#.scvq1weq2) с некоторыми рекомендациями, чтобы определить вашу модель, чтобы получить лучшую его. – Pasky

ответ

57

Вот рецепт, который я скопировал с одного из Алекс Мордвинцев глубокого сна notebook в какой-то момент

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 = "<stripped %d bytes>"%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 = """ 
     <script> 
      function load() {{ 
      document.getElementById("{id}").pbtxt = {data}; 
      }} 
     </script> 
     <link rel="import" href="https://tensorboard.appspot.com/tf-graph-basic.build.html" onload=load()> 
     <div style="height:600px"> 
      <tf-graph-basic id="{id}"></tf-graph-basic> 
     </div> 
    """.format(data=repr(str(strip_def)), id='graph'+str(np.random.rand())) 

    iframe = """ 
     <iframe seamless style="width:1200px;height:620px;border:0" srcdoc="{}"></iframe> 
    """.format(code.replace('"', '&quot;')) 
    display(HTML(iframe)) 

Затем визуализировать текущий график

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

Если ваш график будет сохранен как pbtxt, вы могли бы сделать

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

Вы увидите что-то подобное

enter image description here

+1

Просто то, что мне нужно, спасибо много Ярославу! :) – MiniQuark

+0

Я только что нашел источник, который вы упомянули. Возможно, вы могли бы добавить URL-адрес своего ответа? https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/deepdream/deepdream.ipynb – MiniQuark

+0

Есть ли способ добавлять/удалять узлы из основного графика, аналогичные функциям TensorBoard? – abora

2

Я написал простой помощник, который запускает tensorboard из jupyter ноутбука. Просто добавьте эту функцию где-то в верхней части ноутбука

def TB(cleanup=False): 
    import webbrowser 
    webbrowser.open('http://127.0.1.1:6006') 

    !tensorboard --logdir="logs" 

    if cleanup: 
     !rm -R logs/ 

А затем запустить его TB() всякий раз, когда вы сгенерировали свои резюме. Вместо того, чтобы открыть график в том же окне jupyter, это:

  • начинает tensorboard
  • открывает новую вкладку с tensorboard
  • переведет вас в этой вкладке

После того, как вы сделали с исследование, просто нажмите вкладку и остановите прерывание ядра. Если вы хотите очистки ваш каталог журналов, после запуска, просто запустите TB(1)

0

A Tensorboard/фреймов бесплатную версию этой визуализации, которые по общему признанию, получает заставленную может быстро

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 

, который затем может последовать

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

для отображения графика в виде записей в статическом файле SVG Integrated Tensorflow Graph in Dot

4

Я написал расширение Jupyter для интеграции тензора. Он может:

  1. Start tensorboard просто нажав кнопку в Jupyter
  2. Управление нескольких экземпляров tensorboard.
  3. Бесшовная интеграция с интерфейсом Jupyter.

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

+0

Вставьте основную часть ответа здесь. И используйте ссылки только для ссылок. – krishan

 Смежные вопросы

  • Нет связанных вопросов^_^