【深度學習】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)