2016-12-27 3 views
8

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

Здесь есть родственный вопрос, я действительно не понимаю. Tensorboard logging non-tensor (numpy) information (AUC)

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

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

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

ответ

1

Найден способом обойти, создать переменный и присвоить значение Numpy массива переменных, используйте tensorboard для отслеживания переменной

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() 
7

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

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) 
+0

Для скаляра он работает. Для массива, если это высокомерный тензор (обычно это) для цикла, будет очень медленным ... –

2

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

# 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) 
2

, если вы установите this package через 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 каталоге:

enter image description here

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) 

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