歡迎您光臨本站 註冊首頁

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

←手機掃碼閱讀     qp18502452 @ 2020-06-13 , reply:0

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

一、詳細解讀

我們通過這個簡單的例子來熟悉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.可視化學習結果

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

二、完整代碼
 

  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(' Testing ------------')  cost = model.evaluate(X_test, Y_test, batch_size=40)  print('test cost:', cost)  W, b = model.layers[0].get_weights()  print('Weights=', W, ' biases=', 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, 3.0, num=5, endpoint=False)  array([ 2. , 2.2, 2.4, 2.6, 2.8])  >>> np.linspace(2.0, 3.0, num=5, retstep=True)  (array([ 2. , 2.25, 2.5 , 2.75, 3. ]), 0.25)

  


[qp18502452 ] 使用Keras實現簡單線性迴歸模型操作已經有308次圍觀

http://coctec.com/docs/python/shhow-post-238380.html