тензорная доска с массивом

Может ли кто-нибудь привести пример использования тензорной доски для визуализации значения массива numpy?

Здесь есть связанный вопрос, я действительно не понимаю. Нетензорная (NUMPY) информация о регистрации в Tensorboard (AUC)

Например, Если у меня есть

for i in range(100):
    foo = np.random.rand(3,2)

Как я могу отслеживать распределение foo с использованием тензорной доски в течение 100 итераций? Может кто-нибудь привести пример кода? Благодарю.

12 голосов | спросил Kaixiang Lin 28 WedEurope/Moscow2016-12-28T01:50:18+03:00Europe/Moscow12bEurope/MoscowWed, 28 Dec 2016 01:50:18 +0300 2016, 01:50:18

6 ответов


0

Для простых значений (скалярных) вы можете использовать этот рецепт

summary_writer = tf.train.SummaryWriter(FLAGS.logdir)
summary = tf.Summary()
summary.value.add(tag=tagname, simple_value=value)
summary_writer.add_summary(summary, global_step)
summary_writer.flush()

Что касается использования массива, возможно, вы можете добавить 6 значений в последовательность, т.е.

for value in foo:
  summary.value.add(tag=tagname, simple_value=value)
ответил Yaroslav Bulatov 28 WedEurope/Moscow2016-12-28T09:26:27+03:00Europe/Moscow12bEurope/MoscowWed, 28 Dec 2016 09:26:27 +0300 2016, 09:26:27
0

Другой (самый простой) способ - просто использовать заполнители. Во-первых, вы можете сделать заполнитель для вашей формы массива.

# Some place holders for summary
summary_reward = tf.placeholder(tf.float32, shape=(), name="reward")
tf.summary.scalar("reward", summary_reward)

Затем просто вызовите session.run объединенную сводку с feed_dict.

# Summary
summ = tf.summary.merge_all()
...
s = sess.run(summ, feed_dict={summary_reward: reward})
writer.add_summary(s, i)
ответил Sung Kim 18 FebruaryEurope/MoscowbSat, 18 Feb 2017 15:11:15 +0300000000pmSat, 18 Feb 2017 15:11:15 +030017 2017, 15:11:15
0

если вы установите этот пакет через pip install tensorboard-pytorch это становится настолько простым, насколько это возможно:

import numpy as np
from tensorboardX import SummaryWriter
writer = SummaryWriter()
for i in range(50):
    writer.add_histogram("moving_gauss", np.random.normal(i, i, 1000), i, bins="auto")
writer.close()

Сгенерирует соответствующие данные гистограммы в каталоге runs:

 введите описание изображения здесь

ответил fr_andres 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 25 Sep 2017 03:28:05 +0300 2017, 03:28:05
0

Нашел способ обойти, создать переменную и присвоить переменной значение numpy array, использовать тензорную доску для отслеживания переменной

mysummary_writer = tf.train.SummaryWriter("./tmp/test/")
a = tf.Variable(tf.zeros([3,2]), name="a")
sum1 = tf.histogram_summary("nparray1", a)
summary_op = tf.merge_all_summaries()
sess = tf.Session()

sess.run(tf.initialize_all_variables())

for ii in range(10):
    foo = np.random.rand(3, 2)
    assign_op = a.assign(foo)
    summary, _ = sess.run([summary_op, assign_op])
    mysummary_writer.add_summary(tf.Summary.FromString(summary), global_step=ii)
    mysummary_writer.flush()
ответил Kaixiang Lin 28 WedEurope/Moscow2016-12-28T07:10:31+03:00Europe/Moscow12bEurope/MoscowWed, 28 Dec 2016 07:10:31 +0300 2016, 07:10:31
0
sess = tf.Session()
writer = tf.summary.FileWriter('tensorboard_test')
var = tf.Variable(0.0,trainable=False,name='loss')
sess.run(var.initializer)
summary_op = tf.summary.scalar('scalar1',var)

for value in array:    
    sess.run(var.assign(value))
    summary = sess.run(summary_op)
    writer.add_summary(summary,i)

Это работает, но медленно.

ответил FireFLO 28 Jpm1000000pmSun, 28 Jan 2018 14:22:17 +030018 2018, 14:22:17
0

Вы можете определить функцию, подобную этой (взято из сущности gyglim):

def add_histogram(writer, tag, values, step, bins=1000):
    """
    Logs the histogram of a list/vector of values.
    From: https://gist.github.com/gyglim/1f8dfb1b5c82627ae3efcfbbadb9f514
    """

    # Create histogram using numpy
    counts, bin_edges = np.histogram(values, bins=bins)

    # Fill fields of histogram proto
    hist = tf.HistogramProto()
    hist.min = float(np.min(values))
    hist.max = float(np.max(values))
    hist.num = int(np.prod(values.shape))
    hist.sum = float(np.sum(values))
    hist.sum_squares = float(np.sum(values ** 2))

    # Requires equal number as bins, where the first goes from -DBL_MAX to bin_edges[1]
    # See https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/summary.proto#L30
    # Therefore we drop the start of the first bin
    bin_edges = bin_edges[1:]

    # Add bin edges and counts
    for edge in bin_edges:
        hist.bucket_limit.append(edge)
    for c in counts:
        hist.bucket.append(c)

    # Create and write Summary
    summary = tf.Summary(value=[tf.Summary.Value(tag=tag, histo=hist)])
    writer.add_summary(summary, step)

А затем добавьте в составитель сводок вот так:

add_histogram(summary_writer, "Histogram_Name", your_numpy_array, step)
ответил Anjum Sayed 6 Maypm18 2018, 14:12:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132