scalar是用来显示accuracy,cross entropy,dropout等标量变化趋势的函数。 通过scalar可以看到这些量随着训练加深的一个逐步变化的过程,进而可以看出我们模型的优劣。
注意:
1)scalar只能用于单个标量的显示,不能显示张量;
2)scalar可以显示多次训练的结果
变量
变量则可使用Tensorflow.histogram_summary()方法:
tf.histogram_summary(layer_name+"/weights",Weights) #name命名,Weights赋值
标量
1.在tensorflow构建图的过程中放入记录变量
在使用tensorflow构建图的过程中,在需要记录变量值的地方放入summary operations。
使用tf.summary.scalar记录标量
使用tf.summary.histogram记录数据的直方图
使用tf.summary.distribution记录数据的分布图
使用tf.summary.image记录图像数据
————————————————
在要显示的标量下添加代码:
tf.summary.scalar('loss', loss) # 记录优化器的变化
注意:使用相同的配置多次训练,然后相同的数据在同一个图上显示的结果,进入该log所在的文件夹,删除历史记录,仅仅保留最新的结果,就会出现一个比较干净的图。
2.合并summary operation
在变量tensorflow变量初始化之前合并采集点变量,并且将它们写到之前定义的log_dir路径。
summaries合并
merged = tf.summary.merge_all()
# 写到指定的磁盘路径中
train_writer = tf.summary.FileWriter(log_dir + '/train', Session.graph) ##该句也可写在变量初始化后,或者训练流程后面
tf.global_variables_initializer().run()
注意这里的train_writer变量,这里是定义一个信息的存储位置,后面在训练过程中采集到的数据都要通过这个变量写入文件。
3.在网络训练的过程中采集数据
下面就是在网络的训练过程中将该记录的数据记录下来
#训练1k次
for i in range(1000):
sess.run(train_step,feed_dict={
xs:x_data,ys:y_data})
if i%50==0:
result = sess.run(merged,feed_dict={
xs:x_data,ys:y_data}) #merged也是需要run的
train_writer.add_summary(result,i) #result是summary类型的,需要放入writer中,i步数(x轴)
或者
for i in range(1000):
batch = mnist.train.next_batch(50)
summary,_ = session.run([merged,train], feed_dict = {
x:batch[0], y:batch[1], keep_prob:0.5})
train_writer.add_summary(summary,i)
if i % 100 == 0:
print("step %4d: " % i)
print(session.run(accuracy, feed_dict = {
x:batch[0], y:batch[1], keep_prob:1}))
print(session.run(accuracy, feed_dict = {
x:mnist.test.images, y:mnist.test.labels, keep_prob:1}))
train_writer.close()
4.打开tensorboard
进入tensorflow的虚拟环境
tensorboard --logdir="自己存的地址"
复制出现的网址,在网页中打开即可
显示多次训练的结果
要显示多次训练的结果,就要在每次训练的过程中给FileWriter设置不同的目录。比如第一次训练设置如下:
train_writer = tf.summary.FileWriter(log_dir + '/train', self.sess.graph)
那么第二次训练就可以设置为:
train_writer = tf.summary.FileWriter(log_dir + '/train_1', self.sess.graph)
这样当按照常规步骤打开tensorboard时,在面板的左侧就会显示不同的训练结果文件,如果要打开,则勾选相应的文件即可。
当勾选多个时,在图中就会以不同的颜色显示不同的图像。应该可以实现不同模型但是训练结果在一个图中的情况,只需存储路径和train_writer相同)