1. 程式人生 > >TensorFlow之線性迴歸(一)

TensorFlow之線性迴歸(一)

線性迴歸屬於有監督學習,此類問題,根據帶標註的資訊去訓練一個推斷模型。該模型覆蓋一個數據集,並且對不存在的新樣本進行預測。該模型確定以後,構成模型的運算也就固定。在各運算過程有一些參與運算的數值,在訓練過程不斷更新,使模型能夠學習,並對其輸出進行調整。

雖然推斷不同模型在運算數量和組合方式有很大的不同,但是歸納起來,主要是如下的步驟:
1、初始化模型引數
2、輸入訓練資料
3、在訓練資料上執行推斷模型
4、計算損失函式
5、調整模型引數,返回第二步

現在我們同過線性迴歸,瞭解TensorFlow的訓練過程

線性迴歸

線性迴歸是用來度量變數間關係的統計技術。有意思的是該演算法的實現並不複雜,但可以適用於很多情形。正是因為這些原因,我非常樂意以線性迴歸作為開始學習TensorFlow的開始。

請記住,不管在兩個變數(簡單迴歸)或多個變數(多元迴歸)情形下,線性迴歸都是對一個依賴變數,多個獨立變數xi,一個隨機值b間的關係建模。

在本小節中,會建立一個簡單的例子來說明TensorFlow如何假設我們的資料模型符合一個簡單的線性迴歸y = W * x + b,為達到這個目的,首先通過簡單的python程式碼在二維空間中生成一系列的點,然後通過TensorFlow尋找最佳擬合這些點的直線。

實現



import tensorflow as tf
import numpy as np 
import matplotlib.pyplot as plt


def createdate
(datanum,sigma):
#建立datanum個隨機點,數值為[0.1)之間 x_data=np.random.rand(datanum) noise=np.random.normal(0,sigma,x_data.shape) y_data=x_data*12+4 + noise return x_data,y_data def train(x_data,y_data,epoch=10000): #構造一個線性模型 #隨機生成權值和偏置 w=tf.Variable(tf.random_normal([1])) b=tf.Variable(tf.random_normal([1
])) y=w*train_x+b #二次代價函式 loss=tf.reduce_mean(tf.square(y_data-y)) #使用梯度下降法的優化器進行優化 optimzer=tf.train.GradientDescentOptimizer(0.1).minimize(loss) init = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) for step in range(epoch): sess.run(optimzer) #if (step % 100 == 0): # print(step,sess.run([w,b,loss])) return sess.run(w),sess.run(b),sess.run(y) if __name__ == "__main__": #建立一對訓練模型和一對測試模型 train_x,train_y = createdate(100,0.2) #test_x,test_y = createdate(20,0.02) w,b,y = train(train_x,train_y,10000) print ("weight",w) print ("bias",b) #畫圖 plt.figure() #散點圖 plt.scatter(train_x,train_y) #繪製線,顏色為紅色,寬度為5 plt.plot(train_x,y,'r-',lw=1) plt.show()

結果

這裡寫圖片描述