Сохранить график Tensorflow для просмотра в Tensorboard без сводных операций

У меня довольно сложная Tensorflow график, который я хотел бы визуализировать в целях оптимизации. Есть ли функция, которую я могу вызвать, которая просто сохранит график для просмотра в Tensorboard без необходимости аннотировать переменные?

Я попытался это:

merged = tf.merge_all_summaries()
writer = tf.train.SummaryWriter("/Users/Name/Desktop/tf_logs", session.graph_def)

но выход не был произведен. Это использование колеса 0.6.

похоже, это связано: график visualisaton не отображается в tensorboard для модели seq2seq

4 ответов


для повышения эффективности tf.train.SummaryWriter журналы асинхронно на диск. Чтобы убедиться, что график отображается в журнале, необходимо вызвать close() или flush() на писателе перед выходом программы.


вы также можете сбросить график как graphdef protobuf и загрузить его непосредственно в TensorBoard. Это можно сделать без запуска сеанса или запуска модели.

## ... create graph ...
>>> graph_def = tf.get_default_graph().as_graph_def()
>>> graphpb_txt = str(a.graph.as_graph_def())
>>> with open('graphpb.txt', 'w') as f: f.write(graphpb_txt)

это будет выходной файл, который выглядит примерно так, в зависимости от особенностей вашей модели.

node {
  name: "W"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
...
version 1

в TensorBoard вы можете использовать кнопку" Загрузить", чтобы загрузить его с диска.


это сработало для меня:

graph = tf.Graph()
with graph.as_default():
    ... build graph (without annotations) ...
writer = tf.summary.FileWriter(logdir='logdir', graph=graph)
writer.flush()

график загружается автоматически при запуске tensorboard с " --logdir=logdir/". Не требуется кнопка "Загрузить".


для всей ясности, вот как я использовал .flush() метод и решена проблема:

инициализировать писатель с:

writer = tf.train.SummaryWriter("/home/rob/Dropbox/ConvNets/tf/log_tb", sess.graph_def)

и используйте писатель с:

writer.add_summary(summary_str, i)
    writer.flush()