字體:小 中 大 | |
|
|
2020/09/27 00:16:54瀏覽863|回應0|推薦3 | |
Python機器學習筆記(十三):TensorFlow概念整理 一、什麼是TensorFlow (一)TensorFlow簡介 TensorFlow是由Google Brain團隊開發出來的一個可擴展的多平台程式設計介面,用於實作和執行機器學習演算法,於2015年11月以寬鬆的開源版權公開給大眾使用。TensorFlow目前支持多種程式語言的前端介面,而Python的API算是較完整的。 我們可將TensorFlow拆成Tensor與Flow二個部份,來更深入了解TensorFlow,餵給模型處理或由模型計算、輸出的數據可視為Tensor,而模型的演算流程即是Flow。 (二)Tenor(「張量」)概述 「張量」是紀錄數據值的一個物件,而「張量」的維數則稱為「階」(rank),例如:
依其性質,「張量」可區分為以下二種類型: 1.佔位符(placeholders) 「佔位符」是個事先定義好,具有特定型別和形狀的「張量」,是作為為模型輸入數據的機制。 2.變數(variable) 「變數」是個特殊型別的「張量」物件,我們利用它來儲存和更新模型演算過程中的運算參數。 (三)Flow概念 在這裏我們要認識「計算圖」(Graph)與「工作」(Session)這二個觀念,我們可簡略地將「計算圖」視為在規劃草圖,而「工作」則是真正在草圖上畫上顏色,所以同樣的草圖,我們可執行不同的「工作」為其畫上不同的顏色,而每次「工作」完成的圖可儲存起來,供未來使用。 步驟流程可略述如下: 1.建立一個新的、空的「計算圖」。 2.將節點(「張量」與模型運算式)加入這個「計算圖」。 3.執行這個「計算圖」: (1)開始一個新的「工作」 (2)初始化「計算圖」中的「變數」 (3)執行這個「工作」中的「計算圖」 (4)將「工作」執行完成的「計算圖」儲存起來(儲存模型變數) 4.呼叫先前執行完成的「計算圖」 (1)重建一個與儲存模型具有相同節點和名稱的「計算圖」 (2)在新的「工作」環境中將儲存的變數載入 二、以一元一次迴歸模型練習說明TensorFlow流程 """ 迴歸模型 y = wx + b x:特徵向量 y:目標向量 w:加權參數 b:偏誤參數 """ """ 資料集 訓練資料: x_train:訓練用特徵向量 y_train:訓練用目標向量 測試資料: x_test:測試用特徵向量 y_test:測試用目標向量 """ # 安裝TensorFlow套件至Python平台 pip install tensorflow # 在Python程式中匯入tensorflow import tensorflow as tf # 產生一張TensorFlow的空白計算圖 g = tf.Graph() # 將「張量」與模型運算式加到計算圖裏 with g.as_default(): # 設定隨機抽樣種子 tf.set_random_seed(123)
# 1.加入「張量」 # 1.1.加入模型佔位符 # 1.1.1.加入特徵向量佔位符 tf_x = tf.placeholder(shape=(None), dtype=tf.float32, name='tf_x') # shape設定為None的原因,是因為無法事先就知道會輸入多少筆資料 # 1.1.2.加入目標向量佔位符 tf_y = tf.placeholder(shape=(None), dtype=tf.float32, name='tf_y')
# 1.2.加入模型變數 # 1.2.1.加入加權參數變數 weight = tf.Variable(tf.random_normal(shape=(1,1),stddev=0.25)), name='weight) # 隨機設定加權參數初始值 # 1.2.2.加入偏誤參數變數 bias = tf.Variable(0.0, name='bias') # 設定偏誤參數初始值為0.0 # 2.加入模型運算式 # 2.1.建立y=wx+b迴歸模型 y_hat = tf.add(weight * tf_x, bias, name='y_hat') # 2.2.以「均方誤差(MSE)」作為模型訓練時的成本函數 cost = tf.reduce_mean(tf.square(tf_y - y_hat), name='cost') # 2.3.以梯度下降法最小化成本函數來訓練模型 optim = tf.train.GradientDescentOptimizer(learning_rate=0.001) # 設定梯度下降法 train_op = optim.minimize(cost, name='train_op') # 以最小化成本函數來訓練模型 # 3.我們產生一個tf.train.Saver類別物件,將模型訓練結果儲存起來 saver = tf.train.Saver() # 開始一個新的「工作」,執行先前已定義好的「計算圖」g with tf.Session(graph=g) as sess: # 1.初始化「計算圖」g中定義的「變數」w、b的初始值 sess.run(tf.global_variables_initializer()) # 2.開始執行這個「工作」中的「計算圖」來訓練模型 ## 設定訓練模型500次 for i in range(500): ## 指定數據集x_train為「計算圖」中佔位符tf_x ## 指定數據集y_train為「計算圖」中佔位符tf_y ## 使用tf_x及tf_y這二個「佔位符」「張量」,執行「計算圖」裏定義的最小成本梯度下降法運算式來訓練模型 c, _ = sess.run([cost, train_op], feed_dict={tf_x: x_train, tf_y: y_train}) # 3.完成500次的訓練後,將模型的訓練結果儲存起來 saver.save(sess, './trained-model') # './trained-model'為指定檔案儲存名稱 """ 模型經過500次訓練後,會產生一組經訓練結果產生的w與b值 """ """ 利用前面訓練好的模型,餵給模型測試資料x_test,求算迴歸模型的預測目標向量 """ # 產生一張新的「計算圖」 g2 = tf.Graph() # 開始一個新的「工作」,執行g2「計算圖」 with tf.Session(graph=g2) as sess: # 1.重建一個與先前儲存模型有相同節點和名稱的「計算圖」 new_saver = tf.train.import_meta_graph('./trained-model.meta') # 2.在新的工作環境中,將儲存的w、b變數載入 new_saver.restore(sess, './trained-model') # 3.餵給模型測試資料x_test,執行「計算圖」定義的迴歸運算式,求算模型的預測目標向量 y_pred = sess.run('y_hat: 0, feed_dict={'tf_x:0': x_test}) |
|
( 知識學習|其他 ) |