日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MATLAB机器学习系列-3:BP神经网络算例实现

發(fā)布時間:2024/9/30 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB机器学习系列-3:BP神经网络算例实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

BP神經(jīng)網(wǎng)絡(luò)

BP神經(jīng)網(wǎng)絡(luò)是前連接神經(jīng)網(wǎng)絡(luò)中的一種,BP指的是訓(xùn)練方法是誤差反向傳播Backpropagation,要求激活函數(shù)是可導(dǎo)的。

數(shù)據(jù)歸一化

  • 什么是歸一化?

    將數(shù)據(jù)映射到[0, 1]或[-1, 1]區(qū)間或其他的區(qū)間

  • 為什么要歸一化?
    輸入數(shù)據(jù)的單位不一樣,有些數(shù)據(jù)的范圍可能特別大,導(dǎo)致的結(jié)果是神經(jīng)網(wǎng)絡(luò)收斂慢、訓(xùn)練時間長。

    數(shù)據(jù)范圍大的輸入在模式分類中的作用可能會偏大,而數(shù)據(jù)范圍小的輸入作用就可能會偏小。

    由于神經(jīng)網(wǎng)絡(luò)輸出層的激活函數(shù)的值域是有限制的,因此需要將網(wǎng)絡(luò)訓(xùn)練的目標(biāo)數(shù)據(jù)映射到激活函數(shù)的值域。例如神經(jīng)網(wǎng)絡(luò)的輸出層若采用S形激活 函數(shù),由于S形函數(shù)的值域限制在(0,1),也就是說神經(jīng)網(wǎng)絡(luò)的輸出只能限制在(0,1),所以訓(xùn)練數(shù)據(jù)的輸出就要歸一化到[0,1]區(qū)間。

    S形激活函數(shù)在(0,1)區(qū)間以外區(qū)域很平緩,區(qū)分度太小。例如S形函數(shù)f(X)在參數(shù)a=1時,f(100)與f(5)只相差0.0067。

  • 歸一化算法

重點函數(shù)介紹

歸一化函數(shù)(mapminmax)

功能:將矩陣的每一行處理成[-1,1]區(qū)間。處理需要歸一化的m*n矩陣X,歸一化后的矩陣記為Y。
主要有5種調(diào)用形式

  • 1.[Y,PS] = mapminmax(X,YMIN,YMAX)
    其中,YMIN是我們期望歸一化后矩陣Y每行的最小值,YMAX是我們期望歸一化后矩陣Y每行的最大值。
    例1:待處理矩陣X=[4 5 6;7 8 9]我們期望歸一化后每行的最小值為0,最大值為1.程序如下
X=[4 5 6;7 8 9];mapminmax(X,0,1)

運行結(jié)果

  • 2.[Y,PS] = mapminmax(X,FP)
    FP是一個結(jié)構(gòu)體成員,主要是FP.ymin(相當(dāng)于YMIN), FP.ymax(相當(dāng)于YMAX)。1和2處理效果一樣,只不過參數(shù)的帶入形式不同。
X=[4 5 6;7 8 9];FP.ymin = 0;FP.ymax = 1;mapminmax(X,FP)
  • Y = mapminmax(‘a(chǎn)pply’,X,PS)
    PS是訓(xùn)練樣本的映射,測試樣本的預(yù)處理方式應(yīng)與訓(xùn)練樣本相同。只需將映射PS apply到測試樣本。

例3.訓(xùn)練樣本是X,測試樣本是M,歸一化后的訓(xùn)練樣本是Y

X=[4 5 6;7 8 9];M = [2 3;4 5];[Y,PS] = mapminmax(X,0,1);mapminmax('apply',M,PS)
  • X = mapminmax(‘reverse’,Y,PS)

將歸一化后的Y反轉(zhuǎn)為歸一化之前

例4.將n(M的歸一化)反轉(zhuǎn)為M

X=[4 5 6;7 8 9]; M = [2 3;4 5]; [Y,PS] = mapminmax(X,0,1); n = mapminmax('apply',M,PS); mapminmax('reverse',n,PS)

newff (前饋反向傳播網(wǎng)絡(luò))
newff函數(shù)參數(shù)說明

net = newff(P,T,S) % 這兩種定義都可以 net = newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)

P:輸入?yún)?shù)矩陣。(RxQ1),其中Q1代表R元的輸入向量。其數(shù)據(jù)意義是矩陣P有Q1列,每一列都是一個樣本,而每個樣本有R個屬性(特征)。一般矩陣P需要歸一化,即P的每一行都歸一化到[0 1]或者[-1 1]。
  T:目標(biāo)參數(shù)矩陣。(SNxQ2),Q2代表SN元的目標(biāo)向量。
  S:N-1個隱含層的數(shù)目(S(i)到S(N-1)),默認為空矩陣[]。輸出層的單元數(shù)目SN取決于T。返回N層的前饋BP神經(jīng)網(wǎng)絡(luò)
   TF:相關(guān)層的傳遞函數(shù),默認隱含層為tansig函數(shù),輸出層為purelin函數(shù)。
  BTF:BP神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)訓(xùn)練函數(shù),默認值為trainlm函數(shù)。
  BLF:權(quán)重學(xué)習(xí)函數(shù),默認值為learngdm。
  PF:性能函數(shù),默認值為mse,可選擇的還有sse,sae,mae,crossentropy。
  IPF,OPF,DDF均為默認值即可。

2,傳遞函數(shù)TF
  purelin: 線性傳遞函數(shù)。
  tansig :正切S型傳遞函數(shù)。
  logsig :對數(shù)S型傳遞函數(shù)。 
  隱含層和輸出層函數(shù)的選擇對BP神經(jīng)網(wǎng)絡(luò)預(yù)測精度有較大影響,一般隱含層節(jié)點轉(zhuǎn)移函數(shù)選用 tansig函數(shù)或logsig函數(shù),輸出層節(jié)點轉(zhuǎn)移函數(shù)選用tansig函數(shù)或purelin函數(shù)。
3,學(xué)習(xí)訓(xùn)練函數(shù)BTF
  traingd:最速下降BP算法。
  traingdm:動量BP算法。
  trainda:學(xué)習(xí)率可變的最速下降BP算法。
  traindx:學(xué)習(xí)率可變的動量BP算法。
  trainrp:彈性算法。
  變梯度算法:
    traincgf(Fletcher-Reeves修正算法)
     traincgp(Polak_Ribiere修正算法)
     traincgb(Powell-Beale復(fù)位算法)
     trainbfg(BFGS 擬牛頓算法)
     trainoss(OSS算法)

4,參數(shù)說明
  通過net.trainParam可以查看參數(shù)
   Show Training Window Feedback showWindow: true
   Show Command Line Feedback showCommandLine: false
   Command Line Frequency show: 兩次顯示之間的訓(xùn)練次數(shù)
  Maximum Epochs epochs: 訓(xùn)練次數(shù)
   Maximum Training Time time: 最長訓(xùn)練時間(秒)
   Performance Goal goal: 網(wǎng)絡(luò)性能目標(biāo)
   Minimum Gradient min_grad: 性能函數(shù)最小梯度
   Maximum Validation Checks max_fail: 最大驗證失敗次數(shù)
   Learning Rate lr: 學(xué)習(xí)速率
  Learning Rate Increase lr_inc: 學(xué)習(xí)速率增長值
  Learning Rate lr_dec: 學(xué)習(xí)速率下降值
   Maximum Performance Increase max_perf_inc:
   Momentum Constant mc: 動量因子

算例實現(xiàn)

案例背景

第一步:清空環(huán)境變量

%% I. 清空環(huán)境變量 clear all clc

第二步:讀取數(shù)據(jù)

%% II. 訓(xùn)練集/測試集產(chǎn)生 %% % 1. 導(dǎo)入數(shù)據(jù) load spectra_data.mat

查看數(shù)據(jù)
輸入
輸入數(shù)據(jù)有60個樣本,每個樣本401維

plot(NIR')

輸出
輸出數(shù)據(jù)60個樣本,每個樣本1維

plot(octane')

第三步:訓(xùn)練集測試集劃分

%% % 2. 隨機產(chǎn)生訓(xùn)練集和測試集 temp = randperm(size(NIR,1));%size(NIR,1)樣本個數(shù) 表示將樣本順序打亂 % 訓(xùn)練集——50個樣本 P_train = NIR(temp(1:50),:)';%50個輸入樣本作為訓(xùn)練輸入,注意轉(zhuǎn)置 T_train = octane(temp(1:50),:)'; % 測試集——10個樣本 P_test = NIR(temp(51:end),:)'; T_test = octane(temp(51:end),:)'; N = size(P_test,2);%N=10

解釋

randperm(5)這個例子將1~5順序隨機打亂。
temp = randperm(size(NIR,1)); 表示將樣本順序打亂,產(chǎn)生1-60的隨機序列
P_train = NIR(temp(1:50)😅 取出前50個,P代表輸入,有轉(zhuǎn)置符號,matlab里面輸入和輸出必須保證列相同。python里面必須保證行相同。

第四步:歸一化

%% III. 數(shù)據(jù)歸一化 [p_train, ps_input] = mapminmax(P_train,0,1); p_test = mapminmax('apply',P_test,ps_input); %訓(xùn)練集輸出歸一化 [t_train, ps_output] = mapminmax(T_train,0,1);

打印下

plot(p_train(1,:))

輸入50列

輸出50列

第五步:模型搭建

%% IV. BP神經(jīng)網(wǎng)絡(luò)創(chuàng)建、訓(xùn)練及仿真測試 %% % 1. 創(chuàng)建網(wǎng)絡(luò) net = newff(p_train,t_train,9);%% % 2. 設(shè)置訓(xùn)練參數(shù) net.trainParam.epochs = 1000;%迭代次數(shù) net.trainParam.goal = 1e-3;%訓(xùn)練目標(biāo)mse小于目標(biāo)才會結(jié)束 net.trainParam.lr = 0.01;%學(xué)習(xí)率%% % 3. 訓(xùn)練網(wǎng)絡(luò) net = train(net,p_train,t_train);

newff 前饋神經(jīng)網(wǎng)絡(luò)
newff(p_train,t_train,9); 參數(shù):輸入,輸出,隱含神經(jīng)元個數(shù)
輸入net可查看模型


train神經(jīng)網(wǎng)絡(luò)訓(xùn)練函數(shù)

訓(xùn)練運行界面

訓(xùn)練運行界面點擊performance

訓(xùn)練運行界面點擊Training state

訓(xùn)練運行界面點擊 Regression 回歸結(jié)果

第六步:仿真測試
sim:神經(jīng)網(wǎng)絡(luò)仿真函數(shù)

%% % 4. 仿真測試 t_sim = sim(net,p_test);

第七步:結(jié)果反歸一化

%% % 5. 數(shù)據(jù)反歸一化 T_sim = mapminmax('reverse',t_sim,ps_output);

第八步:性能評價

%% V. 性能評價 %% % 1. 相對誤差error error = abs(T_sim - T_test)./T_test;%% % 2. 決定系數(shù)R^2 R2 = (N * sum(T_sim .* T_test) - sum(T_sim) * sum(T_test))^2 / ((N * sum((T_sim).^2) - (sum(T_sim))^2) * (N * sum((T_test).^2) - (sum(T_test))^2)); %% % 3. 結(jié)果對比 result = [T_test' T_sim' error']

第九步:結(jié)果繪圖

%% VI. 繪圖 figure plot(1:N,T_test,'b:*',1:N,T_sim,'r-o') legend('真實值','預(yù)測值') xlabel('預(yù)測樣本') ylabel('辛烷值') string = {'測試集辛烷值含量預(yù)測結(jié)果對比';['R^2=' num2str(R2)]}; title(string)

全文代碼
main.m

%% I. 清空環(huán)境變量 clear all clc%% II. 訓(xùn)練集/測試集產(chǎn)生 %% % 1. 導(dǎo)入數(shù)據(jù) load spectra_data.mat%% % 2. 隨機產(chǎn)生訓(xùn)練集和測試集 temp = randperm(size(NIR,1)); % 訓(xùn)練集——50個樣本 P_train = NIR(temp(1:50),:)'; T_train = octane(temp(1:50),:)'; % 測試集——10個樣本 P_test = NIR(temp(51:end),:)'; T_test = octane(temp(51:end),:)'; N = size(P_test,2);%% III. 數(shù)據(jù)歸一化 [p_train, ps_input] = mapminmax(P_train,0,1); p_test = mapminmax('apply',P_test,ps_input);[t_train, ps_output] = mapminmax(T_train,0,1);%% IV. BP神經(jīng)網(wǎng)絡(luò)創(chuàng)建、訓(xùn)練及仿真測試 %% % 1. 創(chuàng)建網(wǎng)絡(luò) net = newff(p_train,t_train,9);%% % 2. 設(shè)置訓(xùn)練參數(shù) net.trainParam.epochs = 1000; net.trainParam.goal = 1e-3; net.trainParam.lr = 0.01;%% % 3. 訓(xùn)練網(wǎng)絡(luò) net = train(net,p_train,t_train);%% % 4. 仿真測試 t_sim = sim(net,p_test);%% % 5. 數(shù)據(jù)反歸一化 T_sim = mapminmax('reverse',t_sim,ps_output);%% V. 性能評價 %% % 1. 相對誤差error error = abs(T_sim - T_test)./T_test;%% % 2. 決定系數(shù)R^2 R2 = (N * sum(T_sim .* T_test) - sum(T_sim) * sum(T_test))^2 / ((N * sum((T_sim).^2) - (sum(T_sim))^2) * (N * sum((T_test).^2) - (sum(T_test))^2)); %% % 3. 結(jié)果對比 result = [T_test' T_sim' error']%% VI. 繪圖 figure plot(1:N,T_test,'b:*',1:N,T_sim,'r-o') legend('真實值','預(yù)測值') xlabel('預(yù)測樣本') ylabel('辛烷值') string = {'測試集辛烷值含量預(yù)測結(jié)果對比';['R^2=' num2str(R2)]}; title(string)

代碼和數(shù)據(jù)百度云

鏈接:https://pan.baidu.com/s/1zf1o-B1FQsV7cXKbz4y4VA 提取碼:srx8 復(fù)制這段內(nèi)容后打開百度網(wǎng)盤手機App,操作更方便哦

MATLAB我還是嫌棄的不行。不喜歡matlab語法,再者尼瑪,提示符都沒有

matlab BP更多用法

下面命令將創(chuàng)建一個二層網(wǎng)絡(luò)。它的輸入是兩個元素的向量,第一層有三個神經(jīng)元(3),第二層有一個神經(jīng)元(1)。第一層的傳遞函數(shù)是tan-sigmoid,輸出層的傳遞函數(shù)是linear。輸入向量的第一個元素的范圍是-1到2[-1 2],輸入向量的第二個元素的范圍是0到5[0 5],訓(xùn)練函數(shù)是traingd。

net=newff([-1 2; 0 5],[3,1],{'tansig','purelin'},'traingd');

參數(shù)學(xué)習(xí)
net = newff(minmax§,[隱層的神經(jīng)元的個數(shù),輸出層的神經(jīng)元的個數(shù)],{隱層神經(jīng)元的傳輸函數(shù),輸出層的傳輸函數(shù)},‘反向傳播的訓(xùn)練函數(shù)’),其中p為輸入數(shù)據(jù),t為輸出數(shù)據(jù)

1、tf為神經(jīng)網(wǎng)絡(luò)的傳輸函數(shù),默認為’tansig’函數(shù)為隱層的傳輸函數(shù),

2、purelin函數(shù)為輸出層的傳輸函數(shù)

%TF1 = ‘tansig’;TF2 = ‘logsig’;

%TF1 = ‘logsig’;TF2 = ‘purelin’;

%TF1 = ‘logsig’;TF2 = ‘logsig’;

%TF1 = ‘purelin’;TF2 = ‘purelin’;

TF1=‘tansig’;TF2=‘purelin’;

net=newff(minmax(p),[10,1],{TF1 TF2},'traingdm');%網(wǎng)絡(luò)創(chuàng)建

網(wǎng)絡(luò)參數(shù)的設(shè)置

net.trainParam.epochs=10000;%訓(xùn)練次數(shù)設(shè)置net.trainParam.goal=1e-7;%訓(xùn)練目標(biāo)設(shè)置net.trainParam.lr=0.01;%學(xué)習(xí)率設(shè)置,應(yīng)設(shè)置為較少值,太大雖然會在開始加快收斂速度,但臨近最佳點時,會產(chǎn)生動蕩,而致使無法收斂net.trainParam.mc=0.9;%動量因子的設(shè)置,默認為0.9net.trainParam.show=25;%顯示的間隔次數(shù)

指定訓(xùn)練參數(shù)

net.trainFcn = 'traingd'; % 梯度下降算法net.trainFcn = 'traingdm'; % 動量梯度下降算法net.trainFcn = 'traingda'; % 變學(xué)習(xí)率梯度下降算法net.trainFcn = 'traingdx'; % 變學(xué)習(xí)率動量梯度下降算法% (大型網(wǎng)絡(luò)的首選算法)net.trainFcn = 'trainrp'; % RPROP(彈性BP)算法,內(nèi)存需求最小% 共軛梯度算法net.trainFcn = 'traincgf'; %Fletcher-Reeves修正算法net.trainFcn = 'traincgp'; %Polak-Ribiere修正算法,內(nèi)存需求比Fletcher-Reeves修正算法略大net.trainFcn = 'traincgb'; % Powell-Beal復(fù)位算法,內(nèi)存需求比Polak-Ribiere修正算法略大% (大型網(wǎng)絡(luò)的首選算法)net.trainFcn = 'trainscg'; % ScaledConjugate Gradient算法,內(nèi)存需求與Fletcher-Reeves修正算法相同,計算量比上面三種算法都小很多net.trainFcn = 'trainbfg'; %Quasi-Newton Algorithms - BFGS Algorithm,計算量和內(nèi)存需求均比共軛梯度算法大,但收斂比較快net.trainFcn = 'trainoss'; % OneStep Secant Algorithm,計算量和內(nèi)存需求均比BFGS算法小,比共軛梯度算法略大% (中型網(wǎng)絡(luò)的首選算法)net.trainFcn = 'trainlm'; %Levenberg-Marquardt算法,內(nèi)存需求最大,收斂速度最快net.trainFcn = 'trainbr'; % 貝葉斯正則化算法有代表性的五種算法為:'traingdx','trainrp','trainscg','trainoss', 'trainlm'%在這里一般是選取'trainlm'函數(shù)來訓(xùn)練,其算對對應(yīng)的是Levenberg-Marquardt算法

訓(xùn)練

net=train(net,pt,t)

作者:電氣工程的計算機萌新-余登武

總結(jié)

以上是生活随笔為你收集整理的MATLAB机器学习系列-3:BP神经网络算例实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 182tv午夜福利在线观看 | 法国空姐在线观看视频 | 午夜免费一级片 | 午夜免费小视频 | 国产伦精品一区二区三区四区免费 | 五月婷在线观看 | 黄色一级大片在线免费看产 | 国内精品久久久久久久影视简单 | 欧美乱妇狂野欧美视频 | 青青草亚洲 | 日韩精品成人在线观看 | 成人片在线播放 | 极品销魂美女一区二区三区 | 黄色一级片欧美 | 国产无遮无挡120秒 欧美综合图片 | 午夜在线一区二区 | 在线国产一区二区三区 | 好色视频tv | 日本在线视频一区二区三区 | 美女网站免费黄 | 欧美成人精品激情在线视频 | 亚洲涩涩图 | 午夜视频网站 | 911av| 国产精品视频一区二区三区 | 国精产品一二三区精华液 | 伊人3| 日本a√在线观看 | 午夜av影院| 国产思思99re99在线观看 | 国产婷婷在线观看 | 自拍偷拍视频网 | 爽爽淫人| 欧美黑人又粗又大高潮喷水 | 国产喷水福利在线视频 | 中文字幕视频网 | 国产亚洲精品久久久久四川人 | 亚洲高清一区二区三区 | 国产在线一区二区三区四区 | 四虎精品在线观看 | 日本成人网址 | 影音先锋在线视频观看 | 91欧美一区二区三区 | 无码专区久久综合久中文字幕 | 欧美性受xxxx | 日韩国产在线播放 | 毛片大全| 伊在线久久丫 | 视频一区中文字幕 | 成人18网站 | 国产伦精品一区三区精东 | 亚洲欧美视频一区二区 | 美女av免费在线观看 | 99热这里有 | xxxxxxxx黄色片 | 美女网站一区 | 亚洲爱爱网站 | 日本婷婷| 天堂网在线视频 | 精品女同一区 | 床戏高潮做进去大尺度视频网站 | 操干网 | 亚洲欧美乱综合图片区小说区 | 亚洲av成人无码久久精品老人 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 黄色一级视频在线观看 | jizz在线观看视频 | 免费一二区 | 桥本有菜aⅴ一区二区三区 在线午夜电影 | 国产福利久久久 | 久久久人| 国产高潮久久 | 中文字幕35页 | 欧美视频精品在线 | 我和岳m愉情xxxⅹ视频 | www毛片| 又黄又爽又刺激的视频 | 91国内视频 | 蜜臀av在线播放 | av资源免费| 男人干女人视频 | 国产精品v欧美精品v日韩 | 成人三区 | 欧洲女同同性吃奶 | 色猫咪av在线 | 国产妇女乱一性一交 | 黄色网址免费 | 欧美精品一区二区三区三州 | 日本在线天堂 | 性日韩 | 操穴网站 | av大全免费 | 午夜一级视频 | 右手影院亚洲欧美 | 骚虎视频最新网址 | 亚洲最大av在线 | 中文字幕无码乱人伦 | 欧美激情精品久久久久久 | 欧美精品亚洲一区 |