TensorBoard-график обучения и потери проверки на одном графике?

есть ли способ построить как потери обучения, так и потери проверки на же графика?

легко иметь два отдельных скалярных резюме для каждого из них по отдельности, но это ставит их на отдельные графики. Если оба отображаются на одном графике, гораздо легче увидеть разрыв между ними и начинают ли они расходиться из-за переоснащения.

есть ли встроенный способ сделать это? Если нет, то обходной путь? Спасибо много!

4 ответов


работа, которую я делал, заключается в использовании двух SummaryWriter с различным журналом dir для набора обучения и набора перекрестной проверки соответственно. И вы увидите нечто подобное:--2-->

enter image description here


вместо того, чтобы отображать две строки отдельно, вы можете вместо этого построить разницу между потерями проверки и обучения в качестве собственного скалярного резюме для отслеживания расхождения.

Это не дает столько информации об одном графике (по сравнению с добавлением двух сводок), но это помогает сравнивать несколько запусков (и не добавлять несколько сводок за один запуск).


Tensorboard действительно хороший инструмент, но по своей декларативной природе может затруднить его сделать именно то, что вы хотите.

Я рекомендую вам проверить Losswise (https://losswise.com) для построения графика и отслеживания функций потерь в качестве альтернативы Tensorboard. С Losswise вы точно указываете, что должно быть графически вместе:

import losswise

losswise.set_api_key("project api key")
session = losswise.Session(tag='my_special_lstm', max_iter=10)
loss_graph = session.graph('loss', kind='min')

# train an iteration of your model...
loss_graph.append(x, {'train_loss': train_loss, 'validation_loss': validation_loss})
# keep training model...

session.done()

и тогда вы получите что-то похожее:

Training and test loss on the same graph

обратите внимание, как данные подаются на конкретный график явно через loss_graph.append вызова, данные за который потом появляется в панели проекта.

кроме того, для приведенного выше примера Losswise автоматически создаст таблицу со столбцами для min(training_loss) и min(validation_loss) таким образом, вы можете легко сравнить сводную статистику по вашим экспериментам. Очень полезно для сравнения результатов большого количества экспериментов.


для полноты, так как tensorboar 1.5.0 теперь это возможно.

вы можете использовать пользовательский плагин scalars. Для этого нужно сначала внести конфигурации макет tensorboard и записать его в файл события. Из примера tensorboard:

import tensorflow as tf
from tensorboard import summary
from tensorboard.plugins.custom_scalar import layout_pb2

# The layout has to be specified and written only once, not at every step

layout_summary = summary.custom_scalar_pb(layout_pb2.Layout(
  category=[
    layout_pb2.Category(
      title='losses',
      chart=[
          layout_pb2.Chart(
              title='losses',
              multiline=layout_pb2.MultilineChartContent(
                tag=[r'loss.*'],
              )),
          layout_pb2.Chart(
              title='baz',
              margin=layout_pb2.MarginChartContent(
                series=[
                  layout_pb2.MarginChartContent.Series(
                    value='loss/baz/scalar_summary',
                    lower='baz_lower/baz/scalar_summary',
                    upper='baz_upper/baz/scalar_summary'),
                ],
              )), 
      ]),
    layout_pb2.Category(
      title='trig functions',
      chart=[
          layout_pb2.Chart(
              title='wave trig functions',
              multiline=layout_pb2.MultilineChartContent(
                tag=[r'trigFunctions/cosine', r'trigFunctions/sine'],
              )),
          # The range of tangent is different. Let's give it its own chart.
          layout_pb2.Chart(
              title='tan',
              multiline=layout_pb2.MultilineChartContent(
                tag=[r'trigFunctions/tangent'],
              )),
      ],
      # This category we care less about. Let's make it initially closed.
      closed=True),
  ]))

writer = tf.summary.FileWriter(".")
writer.add_summary(layout_summary)
# ...
# Add any summary data you want to the file
# ...
writer.close()

A Category группа Charts. Каждый Chart соответствует одному графику, который отображает несколько скаляров вместе. The Chart можно построить простые скаляры (MultilineChartContent) или заполненные области (MarginChartContent, например, когда вы хотите построить отклонение некоторого значения). The tag член MultilineChartContent должен быть список регулярных выражений, которые соответствуют tags скаляров, которые вы хотите сгруппировать в диаграмме. Для получения более подробной информации проверьте proto определения объектов в https://github.com/tensorflow/tensorboard/blob/master/tensorboard/plugins/custom_scalar/layout.proto - ... Обратите внимание, что если у вас есть несколько FileWriters запись в тот же каталог, вам нужно написать макет только в одном из файлов. Пишу он в отдельный файл и работает.

для просмотра данных в TensorBoard необходимо открыть вкладку пользовательские скаляры. Вот пример изображения того, чего ожидать https://user-images.githubusercontent.com/4221553/32865784-840edf52-ca19-11e7-88bc-1806b1243e0d.png