tensorflow—可視化工具TensorBoard的使用
一、TensorBoard介紹
1.TensorBoard使用流程
可視化的資料是資料流圖和張量,題目需要在會話中加載或執行操作後才能擷取。然後使用者需要使用
FileWriter
執行個體将這些資料寫入事件檔案。最後,啟動
TensorBoard
加載事件檔案中的序列化資料,進而可以在各個面闆中展示對應的可視化對象。
TensorBoard
使用流程:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2csIzYq5kMRRlT6FleYhnRzwEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYfRHelRHLwEzX39GZhh2css2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3Pn5GcuUjNwIDMzYTMxATMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
TensorBoard
可視化工作流:
2.抽象結點
如果我們将所有的操作完全的加載到面闆上,會顯得整個資料流圖非常的亂,無法一眼清晰的看出整個結構,這樣很不友善。是以,我們将有些操作合并起來,取一個名字,生成一個抽象的結點,這些抽象的結點再在面闆上可視化就顯得結構清晰,不那麼的亂。
上圖左邊是所有的結點都加載,右邊是加載抽象結點,可以看見,右邊明顯要比左邊好。
那麼如何生成抽象結點呢?
用
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"
檢視:
然後在浏覽器中打開:
http://localhost:6006/
就可以看到可視化的圖
生成的可視化圖為:
(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()
使用抽象結點後生成的可視化圖為: