【深度學習】TensorFlow線性迴歸案例演示(3)
highlight: a11y-dark theme: nico
持續創作,加速成長!這是我參與「掘金日新計劃 · 10 月更文挑戰」的第20天,點擊查看活動詳情
1. 案例回顧
上一篇文章我們搭建了完整線性迴歸模型並進行1000輪訓練,達到了較為不錯的效果。本文將主要介紹在完整機器學習中的其他功能與流程,比如將訓練損失可視化,Tensorboard顯示變量,自定義增加命名空間,模型保存等等。
2. 增加變量顯示
在TensorBoard當中觀察模型的參數、損失值等變量值的變化。不同的數據要用不同的方式去收集,比如標量數據用.scalar
,高維度數據用.histogram
等。
收集變量:
- tf.summary.scalar(name='', tensor)
收集對於損失函數和準確率等單值變量(標量),name為變量的名字,tensor為值。
- tf.summary.histogram(name='', tensor)
收集高維度的變量參數(權重和偏置變化狀況)
- tf.summary.image(name='', tensor)
收集輸入的圖片張量能顯示圖片
合併變量寫入事件文件 - merged=tf.summary.merge_all():將權重偏置都蒐集到一起 - 運行合併:summary = sess.run(merged),每次迭代都需在會話中運行 - 添加:FileWriter.add_summary(summary, i)i表示第幾次的值,將summary對象寫入到事件文件中
3. 代碼演示
步驟1:導入所需庫
ipython
import tensorflow as tf
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
步驟2:線性迴歸並收集變量
- 我們在
./File/linear
目錄下創建了事件文件,用來保存變量中間結果 - 需要在訓練時的每一次循環後將變量寫入事件
- 本案例演示中,主要用到收集變量與變量合併寫入事件,最終得到可視化結果
-
主要流程為:
- 創建事件
- 收集變量
- 合併變量
- 寫入變量 ```ipython def linear_regression(): """ 實現線性迴歸 """
1.1 準備數據
X = tf.random_normal(shape=[100,1]) y_true = tf.matmul(X, [[0.5]]) + 1 # matmul矩陣運算
1.2 模型構造
定義模型參數
用變量來定義
weights = tf.Variable(initial_value=tf.random_normal(shape=[1,1])) # 需要給一個初始設置:正態分佈隨機初始值;一行一列 bias = tf.Variable(initial_value=tf.random_normal(shape=[1,1])) y_predict = tf.matmul(X, weights) + bias
1.3 損失函數
error = tf.reduce_mean(tf.square(y_predict-y_true))
1.4 優化損失
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(error)
2) 收集變量
tf.summary.scalar("error", error) tf.summary.histogram("weights", weights) tf.summary.histogram("bias", bias)
3) 合併變量
merged = tf.summary.merge_all()
2. 初始化變量
init = tf.global_variables_initializer()
3. 開啟會話
with tf.Session() as sess: sess.run(init)
# 1) 創建事件文件 file_writer = tf.summary.FileWriter("./File/linear", graph=sess.graph) # 查看初始化模型參數的值 print("訓練前模型參數為:權重%f, 偏置%f, 損失%f" %(weights.eval(), bias.eval(), error.eval())) # 4. 開始訓練 for i in range(1000): sess.run(optimizer) print("第%d次訓練後模型參數為:權重%f, 偏置%f, 損失%f" %(i+1, weights.eval(), bias.eval(),error.eval())) # 運行合併變量操作 summary = sess.run(merged) # 將每次迭代後的變量寫入事件文件 file_writer.add_summary(summary, i)
return None
linear_regression() ``` 經過1000輪訓練得到的結果如下圖所示:
步驟3:TensorBoard可視化
同時,我們還在當前目錄下建立了新的目錄,File/linear。在這個目錄下記錄了變量的變化過程,我們可以使用Tensorboard將其打開,查看可視化訓練過程。
File文件中是剛才保存變量的事件,需要Tensorboard將其打開查看。
需要我們打開anaconda promp,然後在其中進入到安裝tensorflow的虛擬環境中。進入到事件所在上級目錄。
cd 文件保存上級目錄path
tensorboard --logdir=./File/linear/
可視化圖結果如下所示:
模型損失變化圖如下所示:
權重weight與偏置bias項變化過程如下所示:
權重weight與偏置bias分佈直方圖如下所示:
- 【深度學習】TensorFlow線性迴歸案例演示(3)
- 【機器學習】LSTM神經網絡實現中國人口預測(2)
- 【數據處理】北京市租房案例實戰(5)
- 【數據處理】Pandas庫:畫圖與文件讀取
- 【數據處理】Pandas庫:數組運算
- 【數據處理】北京市租房案例實戰(3)
- 【PaddleDetection深度學習】中國交通標誌圖像分類任務
- 【數據處理】北京市租房案例實戰(4)
- 【數據處理】北京市租房案例實戰(2)
- 【數據處理】Seaborn-NBA數據分析案例(4)
- 【深度學習】工業安全生產環境違規使用手機的識別
- 【數據處理】北京市租房案例實戰(1)
- 【數據處理】Seaborn-NBA數據分析案例(2)
- 【Numpy】數據處理-Numpy庫基本介紹
- 【Numpy數據處理】ndarray介紹
- 【深度學習】醫學影像目標檢測-瘧原蟲識別問題
- Linux操作系統-基本使用(1)
- 智能算法-粒子羣算法(3)
- 智能算法-粒子羣算法(2)
- 智能算法-禁忌搜索算法(2)