• TensorFlow——TensorBoard可视化


    TensorFlow提供了一个可视化工具TensorBoard,它能够将训练过程中的各种绘制数据进行展示出来,包括标量,图片,音频,计算图,数据分布,直方图等,通过网页来观察模型的结构和训练过程中各个参数的变化。

    Tensorboard通过一个日志展示系统进行数据可视化,在session运行图的时候,将各类的数据汇总并输出到日志文件中。然后启动Tensorboard服务,Tensorboard读取日志文件,并开启6006端口提供web服务。让用户可以在浏览器中查看数据。

    相关的API函数如下;

    tf.summary.scalar() :标量数据汇总,输出protobuf

    tf.summary.histogram() :记录变量var的直方图,输出到直方图汇总的protobuf

    tf.summary.image() :图像数据汇总,输出protobuf

    tf.summary.merge() :合并所有的汇总日志

    tf.summary.FileWriter() :创建SummaryWriter

    tf.summary.FileWriter().add_summary()

    tf.summary.FileWriter().add_session_log()

    tf.summary.FileWriter().add_event()

    tf.summary.FileWriter().add_graph() : 将protobuf写入文件的类

    代码如下:

    import tensorflow as tf
    import numpy as np
    import matplotlib.pyplot as plt
    
    train_x = np.linspace(-5, 3, 50)
    train_y = train_x * 5 + 10 + np.random.random(50) * 10 - 5
    
    # plt.plot(train_x, train_y, 'r.')
    # plt.grid(True)
    # plt.show()
    
    X = tf.placeholder(dtype=tf.float32)
    Y = tf.placeholder(dtype=tf.float32)
    
    w = tf.Variable(tf.random.truncated_normal([1]), name='Weight')
    b = tf.Variable(tf.random.truncated_normal([1]), name='bias')
    
    z = tf.multiply(X, w) + b
    
    tf.summary.histogram('z', z)
    
    cost = tf.reduce_mean(tf.square(Y - z))
    
    tf.summary.scalar('loss', cost)
    
    learning_rate = 0.01
    optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
    
    init = tf.global_variables_initializer()
    
    training_epochs = 20
    display_step = 2
    
    
    with tf.Session() as sess:
        sess.run(init)
        loss_list = []
    
        merged_summary_op = tf.summary.merge_all()  # 合并所有的summary
        summary_wirter = tf.summary.FileWriter('log/linear', sess.graph)
    
        for epoch in range(training_epochs):
            for (x, y) in zip(train_x, train_y):
                sess.run(optimizer,feed_dict={X:x, Y:y})
    
            if epoch % display_step == 0:
                loss = sess.run(cost, feed_dict={X:x, Y:y})
                loss_list.append(loss)
                print('Iter: ', epoch, ' Loss: ', loss)
            summary_str = sess.run(merged_summary_op, feed_dict={X:train_x, Y:train_y})
            summary_wirter.add_summary(summary_str, epoch)
    
        w_, b_ = sess.run([w, b], feed_dict={X: x, Y: y})
        print(" Finished ")
        print("W: ", w_, " b: ", b_, " loss: ", loss)
        plt.plot(train_x, train_x*w_ + b_, 'g-', train_x, train_y, 'r.')
        plt.grid(True)
        plt.show()

    上述的可视化步骤主要是

      1.将需要可视化的变量加入summary,做好可视化的定义操作

      2.merged_summary_op = tf.summary.merge_all() # 合并所有的summary

      3.创建summary_wirter对象,并将图写入文件

      4.获取可视化的数据,通过summary_writer对象将数据进行写入

     

    在程序运行完,将会在指定好的路径中生成日志文件,

    通过命令行工具切换到该目录,

     

    执行命令:tensorboard --logdir=生成的日志文件的路径

    打开浏览器进行查看,

     

    定义的图的结构:

  • 相关阅读:
    大学毕业4年-回顾和总结(1)-钱,金钱观
    VR开发中性能问题—OculusWaitForGPU
    动态规划(一)
    POJ 2229 Sumsets
    hihoCoder #1122 : 二分图二•二分图最大匹配之匈牙利算法
    hihoCoder #1127 : 二分图二·二分图最小点覆盖和最大独立集
    hihoCoder #1121 : 二分图一•二分图判定
    HDU 1978 How many ways
    POJ1579 Function Run Fun
    POJ 2081 Recaman's Sequence
  • 原文地址:https://www.cnblogs.com/baby-lily/p/10931302.html
Copyright © 2020-2023  润新知