1. 程式人生 > >kera 學習-線性回歸

kera 學習-線性回歸

測試 n) desc 隨機 eight print epo 輸出結果 show

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

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

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

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()

散點圖如下:

技術分享圖片

二、創建網絡模型

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

三、模型編譯

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

四、模型訓練

# 訓練模型,就跑一次

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)

五、測試模型

#看測試數據損失又多少
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()

輸出結果:

技術分享圖片

此次訓練所得模型:

技術分享圖片

從圖中可以看出,模型沒有很好的滿足我們的需求,進行調整,看下結果:

減小batch_size, 增加訓練次數。

batch_size: 單一批訓練樣本數量

epochs : 將全部樣本訓練都跑一遍為 1 個 epoch, 10 個 epochs 就是全部樣本都訓練 10 次

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

最終所得模型圖為:

技術分享圖片

曲線為:

技術分享圖片

kera 學習-線性回歸