kera 學習-線性回歸
阿新 • • 發佈:2018-07-11
測試 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, 輸出維度 1model.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 學習-線性回歸