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]]。
TensorFlow 學習筆記(1)----線性回歸(linear regression)的TensorFlow實現