Matlab-bp神经网络
一、工作流程
1、加載數(shù)據(jù),產(chǎn)生訓(xùn)練集與測(cè)試集(驗(yàn)證集)
首先加載樣本,其中樣本的輸入叫做:特征(變量),其輸出值叫做:理想值,將樣本分為訓(xùn)練樣本(學(xué)習(xí)所用)和測(cè)試樣本(效果測(cè)試仿真所用)
需要注意的是樣本矩陣的列代表的是樣本的個(gè)數(shù),行代表每個(gè)樣本的數(shù)據(jù)
代碼如下:
load spectra_data.mat
%% 隨機(jī)產(chǎn)生訓(xùn)練集測(cè)試集序列
temp = randperm(size(attributes,2));
%產(chǎn)生訓(xùn)練集樣本
P_train = attributes(:,temp(1:80));%選取前80個(gè)作為訓(xùn)練集樣本
T_train = strength(:,temp(1:80));
%產(chǎn)生測(cè)試集樣本
P_test = attributes(:,temp(81:end));%將80之后的樣本作為測(cè)試集樣本
T_test = strength(:,temp(81:end));
%保存測(cè)試集的樣本個(gè)數(shù)
N = size(P_test,2);
?
2、數(shù)據(jù)歸一化處理
由于輸入數(shù)據(jù)的單位不一樣,所以有些數(shù)據(jù)的范圍可能比較大,導(dǎo)致的結(jié)果可能是神經(jīng)網(wǎng)絡(luò)收斂慢、訓(xùn)練時(shí)間長(zhǎng)
代碼如下:
%% 數(shù)據(jù)歸一化處理
%訓(xùn)練集歸一化
[p_train,ps_input] = mapminmax(P_train,0,1);
[t_train,ps_output] = mapminmax(T_train,0,1);
%測(cè)試集輸入數(shù)據(jù)歸一化
p_test = mapminmax('apply',P_test,ps_input);? %將訓(xùn)練集的歸一化的“標(biāo)準(zhǔn)”應(yīng)用在測(cè)試集的歸一化上
?
3、神經(jīng)網(wǎng)絡(luò)的創(chuàng)建、神經(jīng)網(wǎng)絡(luò)的參數(shù)調(diào)整、神經(jīng)網(wǎng)絡(luò)的訓(xùn)練、神經(jīng)網(wǎng)絡(luò)的仿真、仿真結(jié)果的反歸一化
代碼如下:
?
%% BP神經(jīng)網(wǎng)絡(luò)創(chuàng)建、訓(xùn)練及仿真測(cè)試
%創(chuàng)建網(wǎng)絡(luò)
net = newff(p_train,t_train,9);%創(chuàng)建一個(gè)具有9個(gè)神經(jīng)元的bp神經(jīng)網(wǎng)絡(luò)
%設(shè)置訓(xùn)練參數(shù)
net.trainParam.epochs = 1000;%最多循環(huán)次數(shù)為1000次
net.trainParam.goal = 1e-3;%目標(biāo)誤差小于。。。
net.trainParam.lr = 0.01;%學(xué)習(xí)率設(shè)定為0.01
%訓(xùn)練網(wǎng)絡(luò)
net = train(net,p_train,t_train);
%仿真測(cè)試
t_sim = sim(net,p_test);
%數(shù)據(jù)反歸一化
T_sim = mapminmax('reverse',t_sim,ps_output);
?
4、神經(jīng)網(wǎng)絡(luò)的性能評(píng)價(jià)(相對(duì)誤差計(jì)算、決定系數(shù)計(jì)算)
代碼如下:
%% 性能評(píng)價(jià)
%相對(duì)誤差
error = abs(T_sim - T_test)./T_test;
%決定系數(shù)
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));?
5、結(jié)果對(duì)比、繪圖處理
代碼如下:
%% 結(jié)果對(duì)比
result = [T_test' T_sim' error']
?
%% 繪圖
figure
plot(1:N,T_test,'b:*',1:N,T_sim,'r-o')
legend('標(biāo)簽','標(biāo)簽')
xlabel('標(biāo)簽')
ylabel('標(biāo)簽')
string = {'標(biāo)題'};
title(string)
?
轉(zhuǎn)載于:https://www.cnblogs.com/KZLEARNER/p/8641051.html
總結(jié)
以上是生活随笔為你收集整理的Matlab-bp神经网络的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 求一个qq分手网名女生
- 下一篇: 获取DOM节点的几种方式