天天看點

tensorflow(七)---可視化工具TensorBoard的使用

tensorflow—可視化工具TensorBoard的使用

一、TensorBoard介紹

1.TensorBoard使用流程

可視化的資料是資料流圖和張量,題目需要在會話中加載或執行操作後才能擷取。然後使用者需要使用

FileWriter

執行個體将這些資料寫入事件檔案。最後,啟動

TensorBoard

加載事件檔案中的序列化資料,進而可以在各個面闆中展示對應的可視化對象。

TensorBoard

使用流程:

tensorflow(七)---可視化工具TensorBoard的使用

TensorBoard

可視化工作流:

tensorflow(七)---可視化工具TensorBoard的使用

2.抽象結點

如果我們将所有的操作完全的加載到面闆上,會顯得整個資料流圖非常的亂,無法一眼清晰的看出整個結構,這樣很不友善。是以,我們将有些操作合并起來,取一個名字,生成一個抽象的結點,這些抽象的結點再在面闆上可視化就顯得結構清晰,不那麼的亂。

tensorflow(七)---可視化工具TensorBoard的使用

上圖左邊是所有的結點都加載,右邊是加載抽象結點,可以看見,右邊明顯要比左邊好。

那麼如何生成抽象結點呢?

with tf.name_scope('抽象結點名稱'):

來實作, 比如,将X,Y變量的聲明抽象為一個

input

操作:

with tf.name_scope('input'):
    # 輸入 X, 形狀[47, 3]
    X = tf.placeholder(tf.float32, X_data.shape)
    # 輸出 Y, 形狀[47, 1]
    Y = tf.placeholder(tf.float32, Y_data.shape)
           
二、TensorBoard使用

1.生成模型的可視化圖

(1)不使用抽象結點的可視化

FileWriter(r"檔案路徑", sess.graph)

函數,使用該函數記得

close()

,拿之前的房價預測模型的例子:

alpha = 0.01  # 學習率 alpha = 0.01
epoch = 500  # 訓練全局變量的輪數

# 建立線性回歸模型(資料流圖)

# 1.聲明變量
# 輸入 X, 形狀[47, 3]
X = tf.placeholder(tf.float32, X_data.shape)
# 輸出 Y, 形狀[47, 1]
Y = tf.placeholder(tf.float32, Y_data.shape)
# 權重變量W,形狀[3, 1] 就是訓練參數
W = tf.get_variable('Www', (3, 1), initializer=tf.constant_initializer())  # 用tf.constant_initializer()設定參數的初始值,為常數,預設為1

# 2.假設函數 h(x) = w0*x0 + w1*x1 + w2*x2
# 推理值 Y_pred 形狀[47, 1]
Y_pred = tf.matmul(X, W)

# 3.建立目标函數
# 損失函數為最小二乘法, Y_pred - Y是形如[47, 1]的向量
emp_op = 1 / (2 * len(X_data)) * tf.matmul((Y_pred - Y), (Y_pred - Y), transpose_a=True)

# 4.優化算法
# 采用梯度下降的優化算法
opt = tf.train.GradientDescentOptimizer(learning_rate=alpha)
# 單步訓練操作
train_op = opt.minimize(emp_op)

# 5.建立會話(運作環境)
with tf.Session() as sess:
    # 初始化全局變量
    sess.run(tf.global_variables_initializer())
    # 填充資料
    for e in range(1, epoch + 1):
        sess.run(train_op, feed_dict={X: X_data, Y: Y_data})
        loss, w = sess.run([emp_op, W], feed_dict={X: X_data, Y: Y_data})
        if e%10 == 0:
            loss, w = sess.run([emp_op, W], feed_dict={X: X_data, Y: Y_data})
            print('epoch:{} \t loss={} \t Model: y={}*x2 + {}*x1 + {}'.format(e, loss[0][0], w[1][0], w[2][0], w[0][0]))
           

在anaconda prompt中使用

tensorboard --logdir="C:\Users\Dream^hao\tensorflow_study\study\chapter-4\summary\graph-1"

檢視:

tensorflow(七)---可視化工具TensorBoard的使用

然後在浏覽器中打開:

http://localhost:6006/

就可以看到可視化的圖

生成的可視化圖為:

tensorflow(七)---可視化工具TensorBoard的使用

(2)使用抽象結點後生成的代碼:

alpha = 0.01  # 學習率 alpha = 0.01
epoch = 500  # 訓練全局變量的輪數

# 建立線性回歸模型(資料流圖)

with tf.name_scope('input'):
    # 1.聲明變量
    # 輸入 X, 形狀[47, 3]
    X = tf.placeholder(tf.float32, X_data.shape)
    # 輸出 Y, 形狀[47, 1]
    Y = tf.placeholder(tf.float32, Y_data.shape)

with tf.name_scope('hypotheis'):
    # 權重變量W,形狀[3, 1] 就是訓練參數
    W = tf.get_variable('Www', (3, 1), initializer=tf.constant_initializer())  # 用tf.constant_initializer()設定參數的初始值,為常數,預設為1

    # 2.假設函數 h(x) = w0*x0 + w1*x1 + w2*x2
    # 推理值 Y_pred 形狀[47, 1]
    Y_pred = tf.matmul(X, W)

with tf.name_scope('loss'):
    # 3.建立目标函數
    # 損失函數為最小二乘法, Y_pred - Y是形如[47, 1]的向量
    emp_op = 1 / (2 * len(X_data)) * tf.matmul((Y_pred - Y), (Y_pred - Y), transpose_a=True)

with tf.name_scope('train'):
    # 4.優化算法
    # 采用梯度下降的優化算法
    opt = tf.train.GradientDescentOptimizer(learning_rate=alpha)
    # 單步訓練操作
    train_op = opt.minimize(emp_op)

# 5.建立會話(運作環境)
with tf.Session() as sess:
    # 初始化全局變量
    sess.run(tf.global_variables_initializer())
    # 建立 FileWriter 執行個體
    writer = tf.summary.FileWriter('./summary/graph-1/', sess.graph)
    # 填充資料
    for e in range(1, epoch + 1):
        sess.run(train_op, feed_dict={X: X_data, Y: Y_data})
        loss, w = sess.run([emp_op, W], feed_dict={X: X_data, Y: Y_data})
        if e%10 == 0:
            loss, w = sess.run([emp_op, W], feed_dict={X: X_data, Y: Y_data})
            print('epoch:{} \t loss={} \t Model: y={}*x2 + {}*x1 + {}'.format(e, loss[0][0], w[1][0], w[2][0], w[0][0]))
writer.close()
           

使用抽象結點後生成的可視化圖為:

tensorflow(七)---可視化工具TensorBoard的使用

繼續閱讀