使用Keras實(shí)現(xiàn)簡(jiǎn)單線性回歸模型操作
神經(jīng)網(wǎng)絡(luò)可以用來(lái)模擬回歸問(wèn)題 (regression),實(shí)質(zhì)上是單輸入單輸出神經(jīng)網(wǎng)絡(luò)模型,例如給下面一組數(shù)據(jù),用一條線來(lái)對(duì)數(shù)據(jù)進(jìn)行擬合,并可以預(yù)測(cè)新輸入 x 的輸出值。
一、詳細(xì)解讀
我們通過(guò)這個(gè)簡(jiǎn)單的例子來(lái)熟悉Keras構(gòu)建神經(jīng)網(wǎng)絡(luò)的步驟:
1.導(dǎo)入模塊并生成數(shù)據(jù)
首先導(dǎo)入本例子需要的模塊,numpy、Matplotlib、和keras.models、keras.layers模塊。Sequential是多個(gè)網(wǎng)絡(luò)層的線性堆疊,可以通過(guò)向Sequential模型傳遞一個(gè)layer的list來(lái)構(gòu)造該模型,也可以通過(guò).add()方法一個(gè)個(gè)的將layer加入模型中。layers.Dense 意思是這個(gè)神經(jīng)層是全連接層。
2.建立模型
然后用 Sequential 建立 model,再用 model.add 添加神經(jīng)層,添加的是 Dense 全連接神經(jīng)層。參數(shù)有兩個(gè),(注意此處Keras 2.0.2版本中有變更)一個(gè)是輸入數(shù)據(jù)的維度,另一個(gè)units代表神經(jīng)元數(shù),即輸出單元數(shù)。如果需要添加下一個(gè)神經(jīng)層的時(shí)候,不用再定義輸入的緯度,因?yàn)樗J(rèn)就把前一層的輸出作為當(dāng)前層的輸入。在這個(gè)簡(jiǎn)單的例子里,只需要一層就夠了。
3.激活模型
model.compile來(lái)激活模型,參數(shù)中,誤差函數(shù)用的是 mse均方誤差;優(yōu)化器用的是 sgd 隨機(jī)梯度下降法。
4.訓(xùn)練模型
訓(xùn)練的時(shí)候用 model.train_on_batch 一批一批的訓(xùn)練 X_train, Y_train。默認(rèn)的返回值是 cost,每100步輸出一下結(jié)果。
5.驗(yàn)證模型
用到的函數(shù)是 model.evaluate,輸入測(cè)試集的x和y,輸出 cost,weights 和 biases。其中 weights 和 biases 是取在模型的第一層 model.layers[0] 學(xué)習(xí)到的參數(shù)。從學(xué)習(xí)到的結(jié)果你可以看到, weights 比較接近0.5,bias 接近 2。
Weights= [[ 0.49136472]]
biases= [ 2.00405312]
6.可視化學(xué)習(xí)結(jié)果
最后可以畫出預(yù)測(cè)結(jié)果,與測(cè)試集的值進(jìn)行對(duì)比。
二、完整代碼
import numpy as np np.random.seed(1337) from keras.models import Sequential from keras.layers import Dense import matplotlib.pyplot as plt # 生成數(shù)據(jù) X = np.linspace(-1, 1, 200) #在返回(-1, 1)范圍內(nèi)的等差序列 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組數(shù)據(jù)為訓(xùn)練數(shù)據(jù)集 X_test, Y_test = X[160:], Y[160:] #后40組數(shù)據(jù)為測(cè)試數(shù)據(jù)集 # 構(gòu)建神經(jīng)網(wǎng)絡(luò)模型 model = Sequential() model.add(Dense(input_dim=1, units=1)) # 選定loss函數(shù)和優(yōu)化器 model.compile(loss='mse', optimizer='sgd') # 訓(xùn)練過(guò)程 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)) # 測(cè)試過(guò)程 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) # 將訓(xùn)練結(jié)果繪出 Y_pred = model.predict(X_test) plt.scatter(X_test, Y_test) plt.plot(X_test, Y_pred) plt.show()
三、其他補(bǔ)充
1. numpy.linspace
numpy.linspace(start, stop, num=50, endpoint=True,retstep=False,dtype=None)
返回等差序列,序列范圍在(start,end),生成num個(gè)元素的np數(shù)組,如果endpoint為False,則生成num+1個(gè)但是返回num個(gè),retstep=True則在其后返回步長(zhǎng).
>>> 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)
以上這篇使用Keras實(shí)現(xiàn)簡(jiǎn)單線性回歸模型操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- C#直線的最小二乘法線性回歸運(yùn)算實(shí)例
- 如何在python中實(shí)現(xiàn)線性回歸
- Python 線性回歸分析以及評(píng)價(jià)指標(biāo)詳解
- python 線性回歸分析模型檢驗(yàn)標(biāo)準(zhǔn)--擬合優(yōu)度詳解
- 關(guān)于多元線性回歸分析——Python&SPSS
- sklearn+python:線性回歸案例
- python用線性回歸預(yù)測(cè)股票價(jià)格的實(shí)現(xiàn)代碼
- scikit-learn線性回歸,多元回歸,多項(xiàng)式回歸的實(shí)現(xiàn)
- 8種用Python實(shí)現(xiàn)線性回歸的方法對(duì)比詳解
- python 機(jī)器學(xué)習(xí)之支持向量機(jī)非線性回歸SVR模型
- c# 模擬線性回歸的示例
相關(guān)文章
python subprocess 殺掉全部派生的子進(jìn)程方法
下面小編就為大家?guī)?lái)一篇python subprocess 殺掉全部派生的子進(jìn)程方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01使用TFRecord存取多個(gè)數(shù)據(jù)案例
今天小編就為大家分享一篇使用TFRecord存取多個(gè)數(shù)據(jù)案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02使用python svm實(shí)現(xiàn)直接可用的手寫數(shù)字識(shí)別
這篇文章主要介紹了使用python svm實(shí)現(xiàn)直接可用的手寫數(shù)字識(shí)別,現(xiàn)在網(wǎng)上很多代碼是良莠不齊,真是一言難盡,于是記錄一下,能夠運(yùn)行成功并識(shí)別成功的一個(gè)源碼2021-08-08python使用mediapiple+opencv識(shí)別視頻人臉的實(shí)現(xiàn)
本文主要介紹了python使用mediapiple+opencv識(shí)別視頻人臉,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03在Python3中使用asyncio庫(kù)進(jìn)行快速數(shù)據(jù)抓取的教程
這篇文章主要介紹了在Python3中使用asyncio進(jìn)行快速數(shù)據(jù)抓取,asyncio是一個(gè)異步IO庫(kù),運(yùn)行效率較高,需要的朋友可以參考下2015-04-04python?tkinter自定義實(shí)現(xiàn)Expander控件
和其他成熟的GUI庫(kù)相比,tkinter的組件并不是太多,但在自定義組件這一點(diǎn)上,并不遜色于其他框架,下面小編就教大家如何自定義一個(gè)Expander控件吧2023-08-08Python調(diào)用ctypes使用C函數(shù)printf的方法
這篇文章主要介紹了Python調(diào)用ctypes使用C函數(shù)printf,需要的朋友可以參考下2017-08-08