【tensorflow入门】11、tensorboard可视化--绘制直方图histogram+标量信息scalas

本文为tensorboard的进一步使用,tensorboard的安装及最初使用方法见【tensorflow入门】10、可视化--Tensorboard的安装、使用、排雷

代码见文章最后。

一、踩雷!

本人跟着莫烦教程学习,莫烦教程视频中的tensorflow代码现在已不适用,我改了好久!

1、几个函数更新:

  • tf.train.SummaryWriter         改为:tf.summary.FileWriter
  • tf.merge_all_summaries()    改为:summary_op = tf.summary.merge_all()
  • tf.histogram_summary()       改为:tf.summary.histogram()
  • tf.scalar_summary()              改为:tf.summary.scalar()

否则会报错!

2、tensorboard的图好像每次只能使用一个,不然会报奇怪的错误:

【tensorflow入门】11、tensorboard可视化--绘制直方图histogram+标量信息scalas_第1张图片

错误特别长,报错的具体内容:

InvalidArgumentError: You must feed a value for placeholder tensor 'inputs/x_input' with dtype float and shape [?,1]
	 [[{{node inputs/x_input}} = Placeholder[dtype=DT_FLOAT, shape=[?,1], _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

萌新暂时看不懂,但是百度到了解决方案:

   【tensorflow入门】11、tensorboard可视化--绘制直方图histogram+标量信息scalas_第2张图片

这两种方案中,方法一只需要在自己程序的开头加上tf.reset_default_graph()即可,本人使用后便不报错了。

tf.reset_default_graph函数:用于清除默认图形堆栈并重置全局默认图形。 

还有博主说这个报错是因为tf.summary.merge_all()导致的,本人尝试换用其他函数但并没有成功。

 

3、tensorboard不能正常显示:

【tensorflow入门】11、tensorboard可视化--绘制直方图histogram+标量信息scalas_第3张图片

命令行在给出http://127.0.0.1:6006/的同时还显示了些其它内容,本人get不到这是怎么了。输入网址也没法正常显示:

【tensorflow入门】11、tensorboard可视化--绘制直方图histogram+标量信息scalas_第4张图片

研究了半天,应该是进程之间冲突了?上一个程序没关又新打开一个就会这样报错。

解决方案:正经重启一下软件。重启电脑也行~

【tensorflow入门】11、tensorboard可视化--绘制直方图histogram+标量信息scalas_第5张图片

此时命令行不再出现奇怪的文字,会给出http://127.0.0.1:6006/,复制到浏览器便可正常显示:

【tensorflow入门】11、tensorboard可视化--绘制直方图histogram+标量信息scalas_第6张图片

实在是太不容易了,连环踩雷。

二、代码实现

关键代码:

  •  tf.summary.scalar('loss',loss)   显示loss这一标量信息,效果正如上图中的曲线图所示。
  •  tf.summary.histogram(layer_name+'/weights',Weights)   显示各种直方图,大约这种样子:

【tensorflow入门】11、tensorboard可视化--绘制直方图histogram+标量信息scalas_第7张图片

  • merged =  tf.summary.merge_all()    #把所有的summary合并在一起,打包放到summaryWritter上面
  • writer = tf.summary.FileWriter("logs/",sess.graph)   #把框架loading到一个文件中去,之后才能从文件中loading出来放在浏览器中才能观看     #graph将前边的框架信息全部收集起来,一起放到logs文件夹中去
  •  if i % 50 ==0:
            result = sess.run(merged,feed_dict={xs:x_data,ys:y_data}) #merged返回的是summary
            writer.add_summary(result,i)              #i:记录步数           #把result放入writer里面

具体代码:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt  #Python中画图的工具包

tf.reset_default_graph()
#添加神经层的函数
def add_layer(inputs,in_size,out_size,n_layer,activation_function=None): #传入n_layer
    layer_name = 'layer%s'%n_layer
    with tf.name_scope('layer_name'):
        with tf.name_scope('weights'):
            Weights = tf.Variable(tf.random_normal([in_size,out_size]),name='W')   #二维
            tf.summary.histogram(layer_name+'/weights',Weights)  #histogram
        with tf.name_scope('biases'):
            biases = tf.Variable(tf.zeros([1,out_size])+0.1,name='b')   #1维
            tf.summary.histogram(layer_name+'/biases',biases)
        with tf.name_scope('Wx_plus_b'):
            Wx_plus_b = tf.matmul(inputs,Weights)+biases
        if activation_function is None:
            outputs = Wx_plus_b
        else:
            outputs = activation_function(Wx_plus_b)
        tf.summary.histogram(layer_name+'/outputs',outputs)
        return outputs

x_data = np.linspace(-1,1,300)[:,np.newaxis]  #300行1列
noise = np.random.normal(0,0.05,x_data.shape)
y_data = np.square(x_data) -0.5 + noise 

with tf.name_scope('inputs'):
    xs = tf.placeholder(tf.float32,[None,1],name='x_input')
    ys = tf.placeholder(tf.float32,[None,1],name='y_input')

l1 = add_layer(xs,1,10,n_layer=1,activation_function=tf.nn.relu)
prediction = add_layer(l1,10,1,n_layer=2,activation_function=None)

with tf.name_scope('loss'):
    loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=[1]))
    tf.summary.scalar('loss',loss)     #不用histogram观看,它在event中显示 非常重要!
with tf.name_scope('train'):
    train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
    
init = tf.global_variables_initializer()
sess = tf.Session()
merged =  tf.summary.merge_all()    #把所有的summary合并在一起,打包放到summaryWritter上面




writer = tf.summary.FileWriter("logs/",sess.graph)   #把框架loading到一个文件中去,之后才能从文件中loading出来放在浏览器中才能观看
              #graph将前边的框架信息全部收集起来,一起放到logs文件夹中去
sess.run(init)

#开始训练
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返回的是summary
        writer.add_summary(result,i)              #i:记录步数           #把result放入writer里面


# for i in range(1000):
#     sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
#     if i %50 == 0:
#         print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))  
        
        
                          

 

你可能感兴趣的:(学习笔记)