这是两个很简单(超级简单,我都不想写),但是用起来很舒服的技巧;
log并排显示
首先是信息并排显示,现在的深度学习通常有很多个信息需要同时展示;以loss为例,如果下面这样写,那么屏幕一次能看到的loss有限(当然了,你是竖屏我就没话说了)。
代码
import tensorflow as tf
loss1 = tf.random.normal(shape=[1], name="loss1") # 随机值模拟loss
loss2 = tf.random.normal(shape=[1], name="loss2")
loss3 = tf.random.normal(shape=[1], name="loss3")
loss1_smr = tf.summary.scalar(loss1.name, tf.reduce_mean(loss1)) # 统计标量
loss2_smr = tf.summary.scalar(loss2.name, tf.reduce_mean(loss2))
loss3_smr = tf.summary.scalar(loss3.name, tf.reduce_mean(loss3))
all_loss_smr = tf.summary.merge_all() #合并信息
writer = tf.summary.FileWriter("../logs/") #logs 写出器
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
with tf.Session(config=config) as sess:
for ind in range(20):
writer.add_summary(sess.run(all_loss_smr), ind)
Tensorboard 显示
这种展示方法由于一般的电脑是横屏,能看到的log信息有限。这时候就想,能不能把同一类信息显示在同一行呢?比如,训练集的loss信息显示在一行,学习率变化显示在一行,然后PSNR等评价系数显示在一行。这时候就想到了Tensorflow里面提倡的名称域,我们只需要一句代码就能搞定。
代码
还是以loss为例;
import tensorflow as tf
loss1 = tf.random.normal(shape=[1], name="loss1") # 随机值模拟loss
loss2 = tf.random.normal(shape=[1], name="loss2")
loss3 = tf.random.normal(shape=[1], name="loss3")
with tf.name_scope("loss"):
loss1_smr = tf.summary.scalar(loss1.name, tf.reduce_mean(loss1)) # 统计标量
loss2_smr = tf.summary.scalar(loss2.name, tf.reduce_mean(loss2))
loss3_smr = tf.summary.scalar(loss3.name, tf.reduce_mean(loss3))
all_loss_smr = tf.summary.merge_all() # 合并信息
writer = tf.summary.FileWriter("../logs/") # logs 写出
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
with tf.Session(config=config) as sess:
for ind in range(20):
writer.add_summary(sess.run(all_loss_smr), ind)
Tensorboard 显示
同一窗口显示多个loss
有时候,我们需要比较两个loss,比如,我们需要比较训练时训练集loss与验证集的loss,防止过拟合,这是就希望能在同一个窗口显示两个loss的曲线。写法如下面的代码。
import tensorflow as tf
import numpy as np
loss = tf.placeholder(dtype=tf.float32, name="loss") # 占位符模拟loss
with tf.name_scope("loss"):
loss_smr = tf.summary.scalar(loss.name, tf.reduce_mean(loss))
train_smr = tf.summary.merge([loss_smr])
valid_smr = tf.summary.merge([loss_smr])
train_writer = tf.summary.FileWriter("../logs/train") # logs信息写在不同的文件夹
valid_writer = tf.summary.FileWriter("../logs/valid")
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
with tf.Session(config=config) as sess:
for ind in range(20):
train_writer.add_summary(sess.run(train_smr, feed_dict={loss: np.random.normal()}), ind) # 模拟输入训练集jisuanloss
valid_writer.add_summary(sess.run(valid_smr, feed_dict={loss: np.random.normal()}), ind) # 模拟输入验证集jisuanloss
为什么要将log信息放在两个文件夹,因为这两个log信息是同名的,无法同时存放在同一路径。
Tensorboard 显示
此时,tensorboard显示如下,可以通过左下角的蓝色椭圆中的按钮决定隐藏曲线。