發布時間: 2018-11-22 23:21:17
5.1 實驗介紹
5.1.1 關于本實驗
本實驗主要是展示 TensorBoard 的可視化效果。
5.1.2 實驗目的
了解 TensorBoard 可視化工具。
5.1.3 實驗介紹
TensorFlow 提供了一個可視化工具 TensorBoard。他可以將訓練過程的各種回執數據展示出
來,包括標量,圖片,音頻,計算圖,數據分布,直方圖和嵌入式向量。通過網頁來觀察模型的結構和訓練過程中各個參數的變化。TensorBoard 是日志展示系統,需要在 session 中運算圖時,將各種類型的數據匯總并輸出到日志文件中。然后啟動 TensorBoard 服務,TensorBoard 讀取這些日志文件,并開啟 6060 端口提供 Web 服務,讓用戶可以在瀏覽器中查看數據。
5.1.4 實驗步驟
步驟 1 登陸華為云。
步驟 2 點擊右上方的控制臺。
步驟 3 選擇彈性云服務器,網頁中會顯示該彈性云的可進行的操作,選擇遠程登錄。即登錄到彈性云服務器。
步驟 4 輸入指令 ll,查看當前目錄下的文件。
步驟 5 輸入命令:vi tensorboard.py,創建新的 Python 腳本。
步驟 6 輸入命令 i,進入編輯模式開始編輯,輸入腳本內容。
步驟 7 輸入命令 :wq!,保存并退出。
步驟 8 輸入命令 cat tensorboard.py 查看代碼。
步驟 9 運行測試。
輸入命令:python3 tensorboard.py。
5.2 實驗過程
5.2.1 設置編碼說明
# -*- coding: utf-8 -*-
5.2.2 導入模塊
import tensorflow as tf import numpy as np
import matplotlib.pyplot as plt
plotdata = { "batchsize":[], "loss":[] } def moving_average(a, w=10):
if len(a) < w: return a[:]
return [val if idx < w else sum(a[(idx-w):idx])/w for idx, val in enumerate(a)]
5.2.3 生成模擬數據
#生成模擬數據
train_X = np.linspace(-1, 1, 100)
train_Y = 2*train_X + np.random.randn(*train_X.shape)*0.3 # y=2x,但是加入了噪聲
5.2.4 重置計算圖
#圖形顯示
# plt.plot(train_X, train_Y, 'ro', label='Original data') # plt.legend()
plt.show()
tf.reset_default_graph()
5.2.5 創建模型
# 創建模型
# 占位符
X = tf.placeholder("float") Y = tf.placeholder("float")
# 模型參數
W = tf.Variable(tf.random_normal([1]), name="weight") b = tf.Variable(tf.zeros([1]), name="bias")
5.2.6 構建前向結構
# 前向結構
z = tf.multiply(X, W)+ b
tf.summary.histogram('z',z)#將預測值以直方圖顯示
5.2.7 反向優化
#反向優化
cost =tf.reduce_mean( tf.square(Y - z)) tf.summary.scalar('loss_function', cost) #將損失以標量顯示
learning_rate = 0.01 #Gradient descent
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
5.2.8 初始化變量
# 初始化變量
init = tf.global_variables_initializer()
#參數設置training_epochs = 20
display_step = 2
5.2.9 啟動會話
# 啟 動 session
with tf.Session() as sess:
sess.run(init)
#合并所有 summary
merged_summary_op = tf.summary.merge_all()
#創建 summary_writer,用于寫文件
summary_writer = tf.summary.FileWriter('log/mnist_with_summaries',sess.graph)
5.2.10 向模型中寫入數據
#向模型中輸入數據
for epoch in range(training_epochs): for (x, y) in zip(train_X, train_Y):
sess.run(optimizer, feed_dict={X: x, Y: y})
#生成 summary
summary_str = sess.run(merged_summary_op,feed_dict={X: x, Y: y}); summary_writer.add_summary(summary_str, epoch);#將 summary 寫入文件
#顯示訓練中的詳細信息
if epoch % display_step == 0:
loss = sess.run(cost, feed_dict={X: train_X, Y:train_Y})
print ("Epoch:", epoch+1, "cost=", loss,"W=", sess.run(W), "b=", sess.run(b))
if not (loss == "NA" ): plotdata["batchsize"].append(epoch) plotdata["loss"].append(loss)
print (" Finished!")
print ("cost=", sess.run(cost, feed_dict={X: train_X, Y: train_Y}), "W=", sess.run(W), "b=", sess.run(b))
print ("cost:",cost.eval({X: train_X, Y: train_Y}))
5.2.11 圖形化展示
結果可視化:
plt.plot(train_X, train_Y, 'ro', label='Original data')
plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label='Fitted line') plt.legend()
plt.show()
plotdata["avgloss"] = moving_average(plotdata["loss"]) plt.figure(1)
plt.subplot(211)
plt.plot(plotdata["batchsize"], plotdata["avgloss"], 'b--') plt.xlabel('Minibatch number')
plt.ylabel('Loss')
plt.title('Minibatch run vs. Training loss')
plt.show()
模型結果測試:
print("x=0.2,z=", sess.run(z, feed_dict={X: 0.2}))
5.2.12 實驗結果Epoch:1cost=0.26367584W=[1.4959534] b= [0.1584389]Epoch:3cost=0.11837075W=[1.927753] b= [0.04088809]Epoch:5cost=0.10505076W=[2.04464] b= [-0.00315647]Epoch:7cost=0.10374546W=[2.074953] b= [-0.01477524]Epoch:9cost=0.10355354W=[2.0827925] b= [-0.01778343]Epoch:11cost=0.10351367W=[2.0848196] b= [-0.01856134]Epoch:13cost=0.10350403W=[2.0853424] b= [-0.01876191]Epoch:15cost=0.10350155W=[2.0854788] b= [-0.01881423]Epoch:17cost=0.10350095W=[2.0855126] b= [-0.01882721]Epoch:19cost=0.10350082W=[2.0855196] b= [-0.01882991]Finished!
cost= 0.1035008 W= [2.085521] b= [-0.01883046]
5.1 實驗介紹
5.1.1 關于本實驗
本實驗主要是展示 TensorBoard 的可視化效果。
5.1.2 實驗目的
了解 TensorBoard 可視化工具。
5.1.3 實驗介紹
TensorFlow 提供了一個可視化工具 TensorBoard。他可以將訓練過程的各種回執數據展示出
來,包括標量,圖片,音頻,計算圖,數據分布,直方圖和嵌入式向量。通過網頁來觀察模型的結構和訓練過程中各個參數的變化。TensorBoard 是日志展示系統,需要在 session 中運算圖時,將各種類型的數據匯總并輸出到日志文件中。然后啟動 TensorBoard 服務,TensorBoard 讀取這些日志文件,并開啟 6060 端口提供 Web 服務,讓用戶可以在瀏覽器中查看數據。
5.1.4 實驗步驟
步驟 1 登陸華為云。
步驟 2 點擊右上方的控制臺。
步驟 3 選擇彈性云服務器,網頁中會顯示該彈性云的可進行的操作,選擇遠程登錄。即登錄到彈性云服務器。
步驟 4 輸入指令 ll,查看當前目錄下的文件。
步驟 5 輸入命令:vi tensorboard.py,創建新的 Python 腳本。
步驟 6 輸入命令 i,進入編輯模式開始編輯,輸入腳本內容。
步驟 7 輸入命令 :wq!,保存并退出。
步驟 8 輸入命令 cat tensorboard.py 查看代碼。
步驟 9 運行測試。
輸入命令:python3 tensorboard.py。
5.2 實驗過程
5.2.1 設置編碼說明
# -*- coding: utf-8 -*-
5.2.2 導入模塊
import tensorflow as tf import numpy as np
import matplotlib.pyplot as plt
plotdata = { "batchsize":[], "loss":[] } def moving_average(a, w=10):
if len(a) < w: return a[:]
return [val if idx < w else sum(a[(idx-w):idx])/w for idx, val in enumerate(a)]
5.2.3 生成模擬數據
#生成模擬數據
train_X = np.linspace(-1, 1, 100)
train_Y = 2*train_X + np.random.randn(*train_X.shape)*0.3 # y=2x,但是加入了噪聲
5.2.4 重置計算圖
#圖形顯示
# plt.plot(train_X, train_Y, 'ro', label='Original data') # plt.legend()
plt.show()
tf.reset_default_graph()
5.2.5 創建模型
# 創建模型
# 占位符
X = tf.placeholder("float") Y = tf.placeholder("float")
# 模型參數
W = tf.Variable(tf.random_normal([1]), name="weight") b = tf.Variable(tf.zeros([1]), name="bias")
5.2.6 構建前向結構
# 前向結構
z = tf.multiply(X, W)+ b
tf.summary.histogram('z',z)#將預測值以直方圖顯示
5.2.7 反向優化
#反向優化
cost =tf.reduce_mean( tf.square(Y - z)) tf.summary.scalar('loss_function', cost) #將損失以標量顯示
learning_rate = 0.01 #Gradient descent
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
5.2.8 初始化變量
# 初始化變量
init = tf.global_variables_initializer()
#參數設置training_epochs = 20
display_step = 2
5.2.9 啟動會話
# 啟 動 session
with tf.Session() as sess:
sess.run(init)
#合并所有 summary
merged_summary_op = tf.summary.merge_all()
#創建 summary_writer,用于寫文件
summary_writer = tf.summary.FileWriter('log/mnist_with_summaries',sess.graph)
5.2.10 向模型中寫入數據
#向模型中輸入數據
for epoch in range(training_epochs): for (x, y) in zip(train_X, train_Y):
sess.run(optimizer, feed_dict={X: x, Y: y})
#生成 summary
summary_str = sess.run(merged_summary_op,feed_dict={X: x, Y: y}); summary_writer.add_summary(summary_str, epoch);#將 summary 寫入文件
#顯示訓練中的詳細信息
if epoch % display_step == 0:
loss = sess.run(cost, feed_dict={X: train_X, Y:train_Y})
print ("Epoch:", epoch+1, "cost=", loss,"W=", sess.run(W), "b=", sess.run(b))
if not (loss == "NA" ): plotdata["batchsize"].append(epoch) plotdata["loss"].append(loss)
print (" Finished!")
print ("cost=", sess.run(cost, feed_dict={X: train_X, Y: train_Y}), "W=", sess.run(W), "b=", sess.run(b))
print ("cost:",cost.eval({X: train_X, Y: train_Y}))
5.2.11 圖形化展示
結果可視化:
plt.plot(train_X, train_Y, 'ro', label='Original data')
plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label='Fitted line') plt.legend()
plt.show()
plotdata["avgloss"] = moving_average(plotdata["loss"]) plt.figure(1)
plt.subplot(211)
plt.plot(plotdata["batchsize"], plotdata["avgloss"], 'b--') plt.xlabel('Minibatch number')
plt.ylabel('Loss')
plt.title('Minibatch run vs. Training loss')
plt.show()
模型結果測試:
print("x=0.2,z=", sess.run(z, feed_dict={X: 0.2}))
5.2.12 實驗結果Epoch:1cost=0.26367584W=[1.4959534] b= [0.1584389]Epoch:3cost=0.11837075W=[1.927753] b= [0.04088809]Epoch:5cost=0.10505076W=[2.04464] b= [-0.00315647]Epoch:7cost=0.10374546W=[2.074953] b= [-0.01477524]Epoch:9cost=0.10355354W=[2.0827925] b= [-0.01778343]Epoch:11cost=0.10351367W=[2.0848196] b= [-0.01856134]Epoch:13cost=0.10350403W=[2.0853424] b= [-0.01876191]Epoch:15cost=0.10350155W=[2.0854788] b= [-0.01881423]Epoch:17cost=0.10350095W=[2.0855126] b= [-0.01882721]Epoch:19cost=0.10350082W=[2.0855196] b= [-0.01882991]Finished!
cost= 0.1035008 W= [2.085521] b= [-0.01883046]
上一篇: {Springboot}介紹