TensorFlow——TensorBoard可視化

TensorFlow提供了一個可視化工具TensorBoard,它可以將訓練過程當中的各類繪製數據進行展現出來,包括標量,圖片,音頻,計算圖,數據分佈,直方圖等,經過網頁來觀察模型的結構和訓練過程當中各個參數的變化。web

Tensorboard經過一個日誌展現系統進行數據可視化,在session運行圖的時候,將各種的數據彙總並輸出到日誌文件中。而後啓動Tensorboard服務,Tensorboard讀取日誌文件,並開啓6006端口提供web服務。讓用戶能夠在瀏覽器中查看數據。瀏覽器

相關的API函數以下;session

tf.summary.scalar() :標量數據彙總,輸出protobufapp

tf.summary.histogram() :記錄變量var的直方圖,輸出到直方圖彙總的protobufdom

tf.summary.image() :圖像數據彙總,輸出protobuf函數

tf.summary.merge() :合併全部的彙總日誌工具

tf.summary.FileWriter() :建立SummaryWriterspa

tf.summary.FileWriter().add_summary()命令行

tf.summary.FileWriter().add_session_log()scala

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=生成的日誌文件的路徑

打開瀏覽器進行查看,

 

定義的圖的結構:

相關文章
相關標籤/搜索