keras 學習-線性迴歸

園子裏頭看到了一些最基礎的 keras 入門指導, 用一層網絡,能夠訓練一個簡單的線性迴歸模型。網絡

本身學習了一下,按照教程走下來,結果不盡如人意,下面是具體的過程。dom

 

第一步: 生成隨機數據,繪出散點圖函數

import numpy as np from keras.models  import Sequential from keras.layers import Dense import matplotlib.pyplot as plt # 生產隨機數據
np.random.seed(123) # 指定種子,使得每次生成的隨機數保持一致
x = np.linspace(-1,1,200) # 生成一個長度爲 200 的 list,數值大小在 [-1,1] 之間
np.random.shuffle(x) #隨機排列傳入 list 
y = 0.5 * x + 2 + np.random.normal(0, 0.05, (200,)) # 添加正態分佈的誤差值
#測試數據 與 訓練數據
x_train, y_train = x[:160], y[:160]
x_test, y_test = x[160:], y[160:0]
#繪出散點圖: plt.scatter(x,y) plt.show()

散點圖以下:學習

 

 2、建立網絡模型測試

# 建立模型
model = Sequential() # 添加全鏈接層,輸入維度 1, 輸出維度 1 
model.add(Dense(output_dim = 1, input_dim= 1))

 

3、模型編譯優化

# 模型編譯 # 損失函數:二次方的偏差, 優化器:隨機梯度隨機梯度降低,stochastic gradient descent
model.compile(loss='mse', optimizer='sgd')

 

4、模型訓練lua

# 訓練模型,就跑一次

print('start train model:') for step in range(300): cost = model.train_on_batch(x_train, y_train) if step % 50 == 0: print('cost:', cost)

 

5、測試模型spa

#看測試數據損失又多少
print('start test:') cost = model.evaluate(x_test, y_test, batch_size=40) print('the loss is:', 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()

     輸出結果: code

 

 

這次訓練所得模型:orm

 

從圖中能夠看出,模型沒有很好的知足咱們的需求,進行調整,看下結果:

減少batch_size, 增長訓練次數。

batch_size: 單一批訓練樣本數量

epochs : 將所有樣本訓練都跑一遍爲 1 個 epoch,  10 個 epochs 就是所有樣本都訓練 10 次

# 調整模型訓練過程
model.fit(x_train, y_train, batch_size=5,epochs=60)

 

最終所得模型圖爲:

 

 曲線爲:

相關文章
相關標籤/搜索