前段时间在处理tensorflow的tensorboard时发现当验证集过大,而导致无法一次性处理时将数据写入summary()是一个错误的结果,而在查阅了很多资料后发现很少有这方面的文章。
而tensorflow官方由于最近好像被枪毙了,不翻墙进不去,于是在github上发现一个解决办法,再次记录,帮助新学者。
1、tf.summary
在有足够的空间的情况下(内存或者显存,根据自己情况判断),一般会直接将需要的tensor直接写入到
summary_1 = tf.summary.scalar(name="name_1",tensor=tensor_value_1)
summary_2 = tf.summary.scalar(name="name_2",tensor=tensor_value_2)
summary = tf.summary.merge_all() #summary = tf.summary.merge([summary_1,summary_2])
with tf.Session() as sess:
summary_write = tf.summary.FileWriter(out_dir,sess.graph) #out_dir 为输出路径
summary_out = sess.run(summary)
summary_write.add_summary(summary_out)
但是当数据过大,无法一次性跑完验证集的时候就需要自己定义google_protocol_buffer,此时的方案为下:
2、tf.Summary()
with tf.Session() as sess:
summary_write = tf.summary.FileWriter(out_dir,sess.graph) #out_dir 为输出路径
t_loss = []
for e in batch_data(dev_data):
loss = sess.run(model.loss,feed_dict={model.input:e})
t_loss.append(loss)
loss = np.mean(loss)
dev_summary = tf.Summary()
dev_summary.value.add(tag="name_1",simple_value=loss)
summary_write.add_summary(dev_summary)
###
or
dev_summary = tf.Summary(value = [tf.Summary.value(tag="name_1",simple_value=loss)])
summary_write.add_summary(dev_summary)
###
其他涉及到的image或者是直方图等信息可以参考一下方案:
[链接地址]https://gist.github.com/FireJohnny/1f82b5f7a3eabbdc7aacdb967fe1b557