TensorFlow 學習筆記(1)----線性迴歸(linear regression)的TensorFlow實現
此係列將會每日持續更新,歡迎關注
線性迴歸 (linear regression)的TensorFlow實現
#這裡是基於python 3.7版本的TensorFlow
TensorFlow是一個機器學習的利器,打包了眾多的機器學習中的模型以及各種數學上的處理
因此利用TensorFlow來學習機器學習能起到事半功倍的效果。
以下程式碼即是線性迴歸的實現(實現對函式 y = 0.1 x + 0.3 的迴歸)程式碼內給出詳細註釋便於理解
import tensorflow as tf import numpy as np #生成原始資料 begin x_data = np.random.rand(100).astype(np.float32) #利用rand(100)生成一個一行100列的矩陣, y_data = x_data*0.1 + 0.3 #astype(np.float32)是由於TensorFlow處理的資料型別通常為此型別 #生成原始資料 end ### 構建tensorflow的結構 start ### Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) #權重,即為 y = ax + b 中的 a biases = tf.Variable(tf.zeros([1])) #偏置值,即為 y = ax + b 中的 b y = Weights*x_data + biases loss = tf.reduce_mean(tf.square(y-y_data)) #reduce_mean意為取y-y_data的平方的均值 optimizer = tf.train.GradientDescentOptimizer(0.5) #這裡採用最簡單的梯度下降法來實現迴歸,梯度下降法將會在以後的部落格中利用octave梳理內部細節的實現 #簡單來講,梯度下降就是:1.求導 2.嚮導數為零的點靠攏。 #這裡的0.5表示學習率,通俗來說就是嚮導數為零的點靠攏的速度。 train = optimizer.minimize(loss) #使得誤差最小 ### create tensorflow structure end ### sess = tf.Session() init = tf.global_variables_initializer() #將tf.global_variables_initializer(),即全域性變數初始化寫為init,這樣後面就可以通過sess.run(init)來進行初始化 sess.run(init) #這一步才真正意義上初始化! for step in range(201): sess.run(train) #訓練一次 if step % 10 == 0: print(step, sess.run(Weights), sess.run(biases))#每10次輸出一下結果,進行觀察
這裡是我的輸出結果(因rand不同程式執行多次的結果可能各不相同)
================ RESTART: D:/TensorFlow/linear regression.py ================ 0 [0.36862874] [0.21253814] 20 [0.17672797] [0.25930387] 40 [0.12394582] [0.28729928] 60 [0.10747318] [0.29603627] 80 [0.10233228] [0.29876298] 100 [0.10072788] [0.29961395] 120 [0.10022715] [0.29987952] 140 [0.10007092] [0.2999624] 160 [0.10002212] [0.29998827] 180 [0.10000691] [0.29999635] 200 [0.10000216] [0.29999888]
幾點要點補充:
1. TensorFlow中的一些語法會有一些反直覺:當你要宣告一個變數時,必須用tf.Variable來宣告這個變數,
而你想要輸出某個資料時,例如Weights,必須採用print(sess.run(Weights))才可將其輸出
2. Session 是 Tensorflow 為了控制,和輸出檔案的執行的語句. 執行 session.run() 可以獲得你要得知的運算結果, 或者是你所要運算的部分.
例如:
import tensorflow as tf # create two matrixes matrix1 = tf.constant([[3,3]]) matrix2 = tf.constant([[2], [2]]) product = tf.matmul(matrix1,matrix2) sess = tf.Session() result = sess.run(product) print(result) sess.close()
輸出結果為[[12]]。