1. 程式人生 > 程式設計 >使用Keras實現簡單線性迴歸模型操作

使用Keras實現簡單線性迴歸模型操作

神經網路可以用來模擬迴歸問題 (regression),實質上是單輸入單輸出神經網路模型,例如給下面一組資料,用一條線來對資料進行擬合,並可以預測新輸入 x 的輸出值。

使用Keras實現簡單線性迴歸模型操作

一、詳細解讀

我們通過這個簡單的例子來熟悉Keras構建神經網路的步驟:

1.匯入模組並生成資料

首先匯入本例子需要的模組,numpy、Matplotlib、和keras.models、keras.layers模組。Sequential是多個網路層的線性堆疊,可以通過向Sequential模型傳遞一個layer的list來構造該模型,也可以通過.add()方法一個個的將layer加入模型中。layers.Dense 意思是這個神經層是全連線層。

2.建立模型

然後用 Sequential 建立 model,再用 model.add 新增神經層,新增的是 Dense 全連線神經層。引數有兩個,(注意此處Keras 2.0.2版本中有變更)一個是輸入資料的維度,另一個units代表神經元數,即輸出單元數。如果需要新增下一個神經層的時候,不用再定義輸入的緯度,因為它預設就把前一層的輸出作為當前層的輸入。在這個簡單的例子裡,只需要一層就夠了。

3.啟用模型

model.compile來啟用模型,引數中,誤差函式用的是 mse均方誤差;優化器用的是 sgd 隨機梯度下降法。

4.訓練模型

訓練的時候用 model.train_on_batch 一批一批的訓練 X_train,Y_train。預設的返回值是 cost,每100步輸出一下結果。

5.驗證模型

用到的函式是 model.evaluate,輸入測試集的x和y,輸出 cost,weights 和 biases。其中 weights 和 biases 是取在模型的第一層 model.layers[0] 學習到的引數。從學習到的結果你可以看到,weights 比較接近0.5,bias 接近 2。

Weights= [[ 0.49136472]]

biases= [ 2.00405312]

6.視覺化學習結果

最後可以畫出預測結果,與測試集的值進行對比。

使用Keras實現簡單線性迴歸模型操作

二、完整程式碼

import numpy as np
np.random.seed(1337) 
from keras.models import Sequential
from keras.layers import Dense
import matplotlib.pyplot as plt
 
# 生成資料
X = np.linspace(-1,1,200) #在返回(-1,1)範圍內的等差序列
np.random.shuffle(X) # 打亂順序
Y = 0.5 * X + 2 + np.random.normal(0,0.05,(200,)) #生成Y並新增噪聲
# plot
plt.scatter(X,Y)
plt.show()
 
X_train,Y_train = X[:160],Y[:160]  # 前160組資料為訓練資料集
X_test,Y_test = X[160:],Y[160:]  #後40組資料為測試資料集
 
# 構建神經網路模型
model = Sequential()
model.add(Dense(input_dim=1,units=1))
 
# 選定loss函式和優化器
model.compile(loss='mse',optimizer='sgd')
 
# 訓練過程
print('Training -----------')
for step in range(501):
 cost = model.train_on_batch(X_train,Y_train)
 if step % 50 == 0:
  print("After %d trainings,the cost: %f" % (step,cost))
 
# 測試過程
print('\nTesting ------------')
cost = model.evaluate(X_test,Y_test,batch_size=40)
print('test cost:',cost)
W,b = model.layers[0].get_weights()
print('Weights=',W,'\nbiases=',b)
 
# 將訓練結果繪出
Y_pred = model.predict(X_test)
plt.scatter(X_test,Y_test)
plt.plot(X_test,Y_pred)
plt.show()

三、其他補充

1. numpy.linspace

numpy.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)

返回等差序列,序列範圍在(start,end),生成num個元素的np陣列,如果endpoint為False,則生成num+1個但是返回num個,retstep=True則在其後返回步長.

>>> np.linspace(2.0,3.0,num=5)
array([ 2.,2.25,2.5,2.75,3. ])
>>> np.linspace(2.0,num=5,endpoint=False)
array([ 2.,2.2,2.4,2.6,2.8])
>>> np.linspace(2.0,retstep=True)
(array([ 2.,3. ]),0.25)

以上這篇使用Keras實現簡單線性迴歸模型操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。