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為樣本點...