【Tensorflow_DL_Note16】TensorFlow可视化学习3_参数,准确率的可视化

一 Tensorboard的简介

      TensorBoard是Tensorflow的可视化工具,它可以通过Tensorflow程序运行过程中输出的【日志文件】可视化Tensorflow程序的运行状态。TensorBoard和Tensorflow程序跑在不同的进程中,TensorBoard会自动读取最新的Tensorflow【日志文件】,并呈现当前Tensorflow程序运行的最新状态。下面展示一个简单的Tensorflow程序,在这个程序中,完成了Tensorflow的日志输出功能。

import tensorflow as tf

#1】定义一个简单的计算图,实现向量加法的操作
input1 = tf.constant([1.0,2.0,3.0],name='input1')
input2 = tf.Variable(tf.random_uniform([3]),name='input2')
output = tf.add_n([input1,input2],name='add')

#2】生成一个写日志的writer,并将当前的TensorFlow计算图写入日志。Tensorflow提供了多种写日志文件的API
writer = tf.summary.FileWriter('F:/cifar-10-batches-py',tf.get_default_graph())
writer.close()

        运行上面的代码,会输出Tensorflow计算图的信息,具体输出的信息如下所示:


       然后,在PyCharm的Terminal窗口中输入:tensorboard --logdir=F:/cifar-10-batches-py 命令,回车执行,会输出下面的信息,如下所示:


         将http://DESKTOP-DAQOBTJ:6006 输入到浏览器中,便可以看见可视化的结果,如下所示。


       运行上面的命令,会启动一个服务,这个服务的端口默认为6006。最终,这个计算图的可视化,如上所示。

二 Tensorboard的数据形式和可视化过程

2.1 TensorBoard的数据形式

       TensroBoard可以记录与展示如下的数据形式,如上图右边的橙色下拉菜单所示:

        [1]SCALARS:标量

        [2]IMAGES:图片

        [3]AUDIO:音频

        [4]DEBUGGER:调试器

        [5]GRAPH:计算图

        [6]DISTRIBUTION:数据分布

        [7]HISTOGRAMS:直方图

        [8]TEXT:文本等

2.2 TensorBoard的可视化过程

        1 : 首先,建立一个计算图tf.Graph

        2 :  确定要在计算图Graph中的那些节点放置summary operations以记录信息


    使用tf.summary.scalar()记录标量的运行状态信息;使用tf.summary.image()记录图片的运行状态信息;使用tf.summary.audio()记录Tensorflow中的音频信息;使用tf.summary.graph()记录计算图信息;使用tf.summary.distribution()记录数据的分布图

       3 :  operations并不会真的去执行计算, 除非你已经创建了一个会话tf.Session(),然后,指定它们去run.而我们上一步创建的这些summary operations其实并不被其他节点依赖,因此,我们需要特地的去运行所有的summary节点。但是,如果逐个的指定并运行上面创建的这些summary的话, 一个程序下来太过于繁琐,因此,我们使用tf.summary.merge_all去将上面创建的所有的summary节点合并成一个节点,最后,我们只需要对这个节点执行计算即可,sess.run()

      4 : 第四步使用tf.summary.FileWrite将运行后的数据保存到磁盘中

      5 : 最后,运行整个程序,并在命令行输入tensorboard --logdir=F:/cifar-10-batches-py 命令,就可以在web中查看可视化的结果

三 Tensorboard的案例分析

    此块,我们使用最基础的MNIST手写体数字识别案例。

#=======================================================================================================================
#文件说明:
#       Tensorflow中,监控指标的可视化
# 开发环境:
#       Win10+Tensorflow+OpenCv3.3+Python3.5+PyCharm5.0.3
# 时间地点:
#       陕西师范大学 文津楼 2018.5.13
# 作者:
#       九月
#=======================================================================================================================
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import os
import tensorflow as tf
import tensorflow.examples.tutorials.mnist.input_data  as input_data

BATCH_SIZE    = 10
TRAIN_STEPS   = 5000
SUMMARY_DIR   = 'F:/MnistSet'
#=======================================================================================================================
#函数说明:
#       生成变量监控信息,并定义生成监控信息日志文件的操作
#参数说明:
#       [1]var :需要监控和记录运行状态的张量
#       [2]name:给出了可视化结果中显示的图表名称
#=======================================================================================================================
def variable_summaries(var,name):
    with tf.name_scope('summaries'):
        tf.summary.histogram(name,var)

        mean   = tf.reduce_mean(var)
        tf.summary.scalar('mean/'+name,mean)

        stddev = tf.sqrt(tf.reduce_mean(tf.square(var-mean)))
        tf.summary.scalar('stddev/'+name,stddev)

#=======================================================================================================================
#函数说明:
#       生成一层全连接层神经网络
#=======================================================================================================================
def nn_layer(input_tensor,input_dim,output_dim,layer_name,act=tf.nn.relu):
    with tf.name_scope(layer_name):
        with tf.name_scope('weights'):
            weights = tf.Variable(tf.truncated_normal([input_dim,output_dim],stddev=0.1))
            variable_summaries(weights,layer_name+'/weights')

        with tf.name_scope('biases'):
            biases = tf.Variable(tf.constant(0.0,shape=[output_dim]))
            variable_summaries(biases,layer_name+'/biases')

        with tf.name_scope('Wx_plus_b'):
            preactivate = tf.matmul(input_tensor,weights)+biases
            tf.summary.histogram(layer_name+'/pre_activvations',preactivate)

        activations = act(preactivate,name='activation')
        tf.summary.histogram(layer_name+'/activations',activations)
        return activations
#=======================================================================================================================
#函数说明:
#       Main函数
#=======================================================================================================================
def main(argv=None):
    #【1】从磁盘加载数据
    mnist = input_data.read_data_sets('F:/MnistSet/',one_hot=True)
    #【2】定义两个【占位符】,作为【训练样本图片/此块样本作为特征向量存在】和【类别标签】的输入变量,并将这些占位符存在命名空间input中
    with tf.name_scope('input'):
        x  = tf.placeholder('float', [None, 784],name='x-input')
        y_ = tf.placeholder('float', [None, 10], name='y-input')
    #【2】将【输入的特征向量】还原成【图片的像素矩阵】,并通过tf.summary.image函数定义将当前图片信息作为写入日志的操作
    with tf.name_scope('input_reshape'):
        image_shaped_input = tf.reshape(x,[-1,28,28,1])
        tf.summary.image('input',image_shaped_input,10)
    #【3】创建【神经网络的结构】
    hidden1 = nn_layer(x,784,500,'layer1')
    y       = nn_layer(hidden1,500,10,'layer2',act=tf.identity)
    #【4】定义【损失函数】,【交叉熵损失函数】,并生成【交叉熵损失】的【监控日志】
    with tf.name_scope('cross_entropy'):
        cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
        tf.summary.scalar('corss_entropy',cross_entropy)
    #【5】定义【神经网络损失函数的优化方法】,即神经网络的优化方法
    with tf.name_scope('train'):
        train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy)
    #【6】计算【模型】早当前给定数据集上的正确率
    with tf.name_scope('accuracy'):
        with tf.name_scope('correct_prediction'):
            correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))

        with tf.name_scope('accuracy'):
            accuracy= tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
        tf.summary.scalar('accuracy',accuracy)
    #【7】整理Tensorflow中所有的日志操作
    merged = tf.summary.merge_all()
    #【8】创建回话Session
    with tf.Session() as sess:
        #【9】实例化一个FileWriter的类对象,并将当前TensoirFlow的计算图写入【日志文件】
        summary_writer = tf.summary.FileWriter(SUMMARY_DIR,sess.graph)
        #【10】Tensorflow中创建的变量,在使用前必须进行初始化,下面这个为初始化函数
        tf.global_variables_initializer().run()
        #【11】开始训练
        for i in range(TRAIN_STEPS):
            xs,ys     = mnist.train.next_batch(BATCH_SIZE)
            #【12】运行训练步骤以及所有的【日志文件生成操作】,得到这次运行的【日志文件】。
            summary,_,acc = sess.run([merged,train_step,accuracy],feed_dict={x:xs,y_:ys})
            print('Accuracy at step %s: %s' % (i, acc))
            #【13】将所有的日志写入文件,TensorFlow程序就可以那这次运行日志文件,进行各种信息的可视化
            summary_writer.add_summary(summary,i)

    summary_writer.close()
#========================================================================================================
#模块说明:
#       Tensorflow提供的一个主程序入口,tf.app.run函数将会调用上面的main函数
#========================================================================================================
if __name__ == '__main__':
    tf.app.run()

     然后,输入指令tensorboard --logdir=F:/MnistSet,在web中看见可视化的信息,可视化结果如下所示:









猜你喜欢

转载自blog.csdn.net/maweifei/article/details/80273022