有人可以举例说明如何使用张量板可视化numpy数组值吗?
这里有一个相关的问题,我真的不明白。 Tensorboard logging non-tensor (numpy) information (AUC)
例如, 如果我有
for i in range(100):
foo = np.random.rand(3,2)
如何使用tensorboard跟踪foo的分布100次迭代?有人可以给出代码示例吗? 谢谢。
答案 0 :(得分:17)
对于简单值(标量),您可以使用此配方
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)
答案 1 :(得分:4)
另一种(最简单的)方法就是使用占位符。首先,您可以为numpy数组形状创建占位符。
# Some place holders for summary
summary_reward = tf.placeholder(tf.float32, shape=(), name="reward")
tf.summary.scalar("reward", summary_reward)
然后,只需使用feed_dict调用session.run合并的摘要。
# Summary
summ = tf.summary.merge_all()
...
s = sess.run(summ, feed_dict={summary_reward: reward})
writer.add_summary(s, i)
答案 2 :(得分:3)
如果您通过pip install tensorboard-pytorch
安装this package,它就会变得尽可能简单:
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
目录中生成相应的直方图数据:
答案 3 :(得分: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()
答案 4 :(得分:1)
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)
虽然有效,但速度很慢。
答案 5 :(得分: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)