BP神經網路(基於MATLAB)

2021-09-18 03:15:09 字數 3658 閱讀 1135

clc

clear all

%% 匯入資料

load('s_data.mat') % **s含量所用資料

n = 12; % n 是自變數的個數

m = 1; % m 是因變數的個數

%% 讀取訓練資料

train_num = 1600; %訓練樣本數

train_data = s_data(1:train_num,:);

% 特徵值歸一化

[train_input,mini,maxi] = premnmx(train_data(:,1:n)');

% 構造輸出矩陣

[train_output,mino,maxo] = premnmx(train_data(:,n+1:end)');

%% 建立神經網路

% net = newff(p,t,s,tf,btf,blf,pf)

% net = newff(p,t,[隱層的神經元的個數,輸出層的神經元的個數],,'traincgf','learngdm','mse');

%%%%%%%%%% 設定網路引數 %%%%%%%%%%%

%% 權值賦定值

% [m1,n1]=size(net.iw);

% net.iw=0.3*ones(m1,n1);

% [m2,n2]=size(net.lw);

% net.lw=0.3*ones(m2,n2);

%% 權值賦隨機值

%net.layers.initfcn = 'initwb';

% % net.inputweights.initfcn = 'rands'; % 將權值設定為[-1,1]之間的隨機數

% % net.biases.initfcn = 'rands'; % 將閾值設定為[-1,1]之間的隨機數

% % net.biases.initfcn = 'rands'; % 將閾值設定為[-1,1]之間的隨機數

% %

% % net.layers.initfcn = 'initwb';

% % net.inputweights.initfcn = 'rands'; % 將權值設定為[-1,1]之間的隨機數

% % net.biases.initfcn = 'rands'; % 將閾值設定為[-1,1]之間的隨機數

% % net.biases.initfcn = 'rands'; % 將閾值設定為[-1,1]之間的隨機數

% % net = init(net);

% net.trainparam.epochs = 1000; % 最大迭代次數

net.trainparam.goal = 1e-5; % 網路效能函式訓練目標值

net.trainparam.lr = 0.01; % 學習率

net.trainparam.mc = 0.95; % 動量因子

net.trainparam.show = 10; % 顯示訓練迭代過程

net.trainparam.max_fail = 100; % 最大確認失敗次數

% %% 指定訓練引數

% % net.trainfcn = 'traingdx'; % 變學習率動量梯度下降演算法

% % net.trainfcn = 'trainlm'; %levenberg-marquardt演算法,記憶體需求最大,收斂速度最快

% % net.trainfcn = 'trainbr'; % 貝葉斯正則化演算法

% % net.trainfcn = 'trainbfg'; %quasi-newton algorithms - bfgs algorithm,計算量和記憶體需求均比共軛梯度演算法大,但收斂比較快

% % net.trainfcn = 'traingd'; % 梯度下降演算法

% % net.trainfcn = 'traingdm'; % 動量梯度下降演算法

% % net.trainfcn = 'traingda'; % 變學習率梯度下降演算法

% 開始訓練

tic; % **計時開始

net = train(net,train_input,train_output);% bp神經網路訓練

bptrain_output = sim(net,train_input );% bp神經網路訓練資料**

toc; % **計時結束

train_output = postmnmx(train_output,mino,maxo);

bptrain_output = postmnmx(bptrain_output,mino,maxo);

% 訓練資料誤差

train_err = train_output - bptrain_output;

n1 = length(bptrain_output);

train_rmse = sqrt(sum((train_err).^2)/n1);

%% 讀取測試資料

test_data = s_data(train_num+1:end,:);

% 特徵值歸一化

test_input = tramnmx(test_data(:,1:n)',mini,maxi);

% 構造測試輸出矩陣

test_output = tramnmx(test_data(:,n+1:end)',mino,maxo);

%% bp神經網路測試資料**

bptest_output = sim(net,test_input);

test_output = postmnmx(test_output,mino,maxo);

bptest_output = postmnmx(bptest_output,mino,maxo);

% 測試資料誤差

test_err = test_output - bptest_output;

n2 = length(bptest_output);

test_rmse = sqrt(sum((test_err).^2)/n2);

%% **結果視覺化

figure(1); % 繪製圖1

subplot(2,1,1); % 圖1包含2行1列個子圖形,首先繪製子圖1

plot(bptest_output,':og'); % 用綠色的o繪製測試資料的**輸出值

hold on;

plot(test_output','-*b'); % 用藍色的*繪製測試資料的期望輸出值

legend('**輸出','期望輸出'); % 子圖1的注釋

title('bp神經網路**s含量結果','fontsize',12) %子圖1的標題

ylabel('s含量','fontsize',12); % y軸

xlabel('樣本','fontsize',12); % x軸

subplot(2,1,2); % 繪製子圖2

plot(abs(test_output - bptest_output),'-*'); % 輸出測試資料的**誤差

title('bp神經網路**s含量誤差','fontsize',12) %子圖2的標題

ylabel('誤差','fontsize',12); % y軸

xlabel('樣本','fontsize',12); % x軸

Matlab實現BP神經網路

該實現為 資料探勘 課程的一次作業。資料在 上,所以資料為csv格式。但bp神經網路演算法為最一般的實現,所以有參考價值。close all 關閉開啟的檔案 clear 清除記憶體中的資料 echo on 顯示執行的每一條命令 clc 清除命令列視窗 pause 敲任意鍵開始 定義訓練樣本 p為輸入...

bp神經網路matlab 神經網路有哪些網路

深度學習,人工智慧,神經網路這些概念往往令初學者頭疼不已,這裡列出其基礎概念的歸納總結,幫助小白入坑,共同學習。人工神經網路 artificial neural network,ann 是一種模擬生物神經網路的結構和功能的數學模型或計算模型。神經網路與小波分析 混沌 粗糙理論 分形理論的融合。194...

基於MATLAB的BP神經網路反演水質引數

點滴學習,貴在記錄 在做乙個關於水質反演的專案時,常規模型精度較低,因此考慮採用bp神經網路來做反演。我要實現的是基於樣本資料訓練bp神經網路,然後基於此匯入tif影像資料,然後得到水質引數的空間分布影像 帶座標系 讀取樣本點。將k個樣本點分成訓練集和測試集,我的樣本點資料為k 4的矩陣,k為樣本點...