bp神经网络matlab feedfollownet,BP神经网络模型:Matlab
本文介紹了運(yùn)用計(jì)量統(tǒng)計(jì)軟件Matlab(2017a MAC) 建立BP神經(jīng)網(wǎng)絡(luò)模型的方法。主要運(yùn)用的方程是feedforwardnet
整理數(shù)據(jù)
本例中的數(shù)據(jù)來(lái)自于Matalab提供的內(nèi)置數(shù)據(jù),可以通過(guò)代碼
load bodyfat_dataset
獲得,為方便其他軟件讀取,已經(jīng)將數(shù)據(jù)復(fù)制粘貼到Excel中
本例中,1至13列為輸入變量,第14列為輸出變量,即輸入層包含13個(gè)神經(jīng)元,輸出層又一個(gè)神經(jīng)元。另外設(shè)定一個(gè)隱含層,包括20個(gè)神經(jīng)元
每個(gè)神經(jīng)元包含252個(gè)數(shù)據(jù)點(diǎn),其中最后一個(gè)點(diǎn)不參與訓(xùn)練,留作測(cè)試最終的模型,即利用前251個(gè)數(shù)據(jù)點(diǎn)訓(xùn)練模型,利用最后一個(gè)點(diǎn)檢驗(yàn)?zāi)P?/p>
在Matlab中輸入數(shù)據(jù)
1、點(diǎn)擊打開(kāi) Matlab ,確保保存的Excel文件和軟件路徑一致
2、在 Editor 界面中編輯代碼,其中 clc 清除 Command Window, clear 清除 Workspace
2、在 Editor 界面中編輯代碼,其中 clc 清除 Command Window, clear 清除 Workspace
clcclear
Note 1:
選中代碼,點(diǎn)擊鼠標(biāo)右鍵,選擇 Evaluate Selection 執(zhí)行選中代碼
3、利用 xlsread 函數(shù)讀取數(shù)據(jù),其中第一格單引號(hào)內(nèi)是文件名稱,第二格是工作表位置,第三格單引號(hào)內(nèi)是數(shù)據(jù)范圍
clccleardata=xlsread('bodyfat_dataset',1,' A1:N252'
執(zhí)行代碼后,新的變量出現(xiàn)在 Workspace 頁(yè)面中,其中,矩陣列表示各變量,行表示各數(shù)據(jù)
進(jìn)行BP神經(jīng)網(wǎng)絡(luò)建模
數(shù)據(jù)錄入完成后,繼續(xù)在Editor界面進(jìn)行操作
1、首先利用feedforwardnet函數(shù)建立模型,20表示隱含層包含20個(gè)神經(jīng)元,輸入層至隱含層的傳遞函數(shù)為Hyperbolic tangent函數(shù),隱含層至輸出層的傳遞函數(shù)為Sigmoid函數(shù)
clccleardata = xlsread('bodyfat_dataset',1,' A1:N252');net = feedforwardnet(20);net.layers{1}.transferFcn = 'tansig';net.layers{2}.transferFcn = 'logsig';
2、對(duì)原始數(shù)據(jù)進(jìn)行拆分,前251個(gè)數(shù)據(jù)用來(lái)訓(xùn)練,最后一個(gè)用來(lái)測(cè)試
clccleardata = xlsread('bodyfat_dataset',1,' A1:N252');net = feedforwardnet(20);net.layers{1}.transferFcn = 'tansig';net.layers{2}.transferFcn = 'logsig';input = data(1:251,1:13);inputend = data(end,1:13);target = data(1:251,14);targetend = data(end,end);
3、利用train對(duì)模型進(jìn)行訓(xùn)練,遵循反向修改權(quán)重的原則
clccleardata = xlsread('bodyfat_dataset',1,' A1:N252');net = feedforwardnet(20);net.layers{1}.transferFcn = 'tansig';net.layers{2}.transferFcn = 'logsig';input = data(1:251,1:13);inputend = data(end,1:13);target = data(1:251,14);targetend = data(end,end);net = train(net,input',target');
在跳出的訓(xùn)練圖中,可以看出該模型輸入層個(gè)神經(jīng)元,隱含層20個(gè),輸出層1個(gè)。模型訓(xùn)練17次就達(dá)到預(yù)期要求
4、最后,利用留置的數(shù)據(jù)進(jìn)行測(cè)試,輸出值與目標(biāo)值的偏差
clccleardata = xlsread('bodyfat_dataset',1,' A1:N252');net = feedforwardnet(20);net.layers{1}.transferFcn = 'tansig';net.layers{2}.transferFcn = 'logsig';input = data(1:251,1:13);inputend = data(end,1:13);target = data(1:251,14);targetend = data(end,end);net = train(net,input',target');net(inputend')-targetend
Note 1 :
重復(fù)運(yùn)行代碼,可以發(fā)現(xiàn)每次的結(jié)果并不相同,這是因?yàn)?#xff0c;初始權(quán)重是隨機(jī)設(shè)定的
Note 2 :
由于初始權(quán)重是隨機(jī)設(shè)定的,所以每次運(yùn)行的結(jié)果可能有所不同,這也體現(xiàn)出神經(jīng)網(wǎng)絡(luò)模型的局限性,模型訓(xùn)練找出的誤差最小權(quán)重可能只是局部上使誤差最小的權(quán)重,這樣的權(quán)重可能有很多個(gè),所以結(jié)果有很多種。解決這種問(wèn)題的一個(gè)方法是,留一部分?jǐn)?shù)據(jù)不參加訓(xùn)練,而是用來(lái)測(cè)試模型的輸出結(jié)果,當(dāng)輸出與目標(biāo)值較為接近時(shí),再利用模型進(jìn)行預(yù)測(cè)
5、在代碼前添加rng(0),則限定了初始權(quán)重,重復(fù)運(yùn)行代碼,將得到相同的結(jié)果
clcclear1rng(0)data = xlsread('bodyfat_dataset',1,' A1:N252');net = feedforwardnet(20);net.layers{1}.transferFcn = 'tansig';net.layers{2}.transferFcn = 'logsig';input = data(1:251,1:13);inputend = data(end,1:13);target = data(1:251,14);targetend = data(end,end);net = train(net,input',target');net(inputend')-targetend
總結(jié)
以上是生活随笔為你收集整理的bp神经网络matlab feedfollownet,BP神经网络模型:Matlab的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言的编译器手机版,C语言编译器下载_
- 下一篇: 图论及其应用 2011年 期末考试 答