1. 程式人生 > >TensorFlow 學習筆記(1)----線性回歸(linear regression)的TensorFlow實現

TensorFlow 學習筆記(1)----線性回歸(linear regression)的TensorFlow實現

利用 全局 variable 一次 del ali min 學習筆記 mini

此系列將會每日持續更新,歡迎關註

線性回歸(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實現