目錄
一、理論基礎
1.1基于BP神經網絡的識别
1.2基于RBF神經網絡的識别
1.3基于GRNN神經網絡的識别
二、核心程式
三、仿真測試結果
作者ID :fpga和matlab
擅長技術:
1.無線基帶,無線圖傳,編解碼
2.機器視覺,圖像處理,三維重建
3.人工智能,深度學習
4.智能控制,智能優化
5.其他
一、理論基礎
1.1基于BP神經網絡的識别
BP神經網絡,即Back Propagation神經網絡,其本質是一種基于誤差回報傳播的神經網絡算法。從結構上講,BP神經網絡是由一個資訊的正向傳播網絡和一個誤差的反向傳播網絡兩個子產品構成。BP神經網絡的基本結構如下圖所示:

從圖1的結構可知,BP神經網絡主要由輸入層,隐含層以及輸出層構成。來自外界的資訊通過輸入層傳輸進入到隐含層進行處理,并由輸出層輸出處理結果。當BP神經網絡的輸出結果和其期望結果之間的誤差較大的時候,則進入反向傳播階段,并進行進行審計網絡權值的修正,直到輸出結果和期望結果誤差滿足一定條件為止。
1.2基于RBF神經網絡的識别
RBF網絡是一種三層前向網絡:
第一層為輸入層,由信号源節點組成。
第二層為隐含層,隐單元的變換函數是一種局部分布的非負非線性函數,他對中心點徑向對稱且衰減。隐含層的單元數由所描述問題的需要确定。
第三層為輸出層,網絡的輸出是隐單元輸出的線性權重。
通常使用的RBF有:高斯函數、多二次函數(multiquadric function)、逆多二次函數、薄闆樣條函數等。普通RBF網絡采用的是高斯函數。當“基函數”采用的高斯基函數具備如下的優點:
①表示形式簡單,即使對于多變量輸入也不增加太多的複雜性;
②徑向對稱;
③光滑性好,任意階導數均存在;
④由于該基函數表示簡單且解析性好,因而便于進行理論分析。
RBF網絡具有良好的逼近任意非線性函數和表達系統内在的難以解析的規律性的能力,并且具有極快的學習收斂速度。基于徑向基函數網絡的上述優點,我們将其應用于對非線性函數的模拟當中。
1.3基于GRNN神經網絡的識别
GRNN,即General Regression Neural Network,中文全稱為廣義回歸神經網絡,是由The Lockheed Palo Alto研究實驗室在1991年提出的。GRNN是一種新型的基于非線性回歸理論的神經網絡模型[43,44]。GRNN是建立在非參數核回歸基礎之上的,該神經網絡是以測試樣本為後驗條件,并從觀測樣本中計算得到自變量和因變量之間的機率密度函數,然後在計算出因變量關于自變量的回歸值。由于GRNN不需要規定模型的類型,隻需要設定神經網絡的光滑因子參數,GRNN神經網絡的光滑因子參數的取值對神經網絡的輸出影響較大,當光滑因子參數較大的時候,其對應的神經元所覆寫的輸入區域就越大;當光滑因子參數較小的時候,神經網絡對應的徑向基函數曲線較陡,是以神經網絡輸出結果更接近期望值,但此時光滑度越差。
由于GRNN廣義回歸神經網絡是基于非線性核回歸分析的神經網絡,是以,對于任意一個非獨立變量y,其相對于獨立變量x的回歸分析的過程是計算具有最大機率值y。現假設随機變量x和y的聯合機率密度函數為f (x ,y),已知x的觀測值為X,則y相對于X的回歸,即條件均值為:
GRNN結構如圖所示,整個網絡包括輸入層、模式層、求和層與輸出層。
從結構圖可知,GRNN神經網絡的輸入層神經元數目和輸入樣本的次元是相同的,即每一個神經元将輸入信号直接傳遞給GRNN神經網絡的隐含層中。
二、核心程式
clc;
clear;
close all;
warning off;
addpath 'func\'
%%
%選擇神經網絡類型;
%1:BP神經網絡
%2:GRNN神經網絡
%3:RBF神經網絡
SEL = 2;
load data.mat
%檢測航迹的異常端,這裡通過對資料航迹進行分段處理,分析每一段的特征,并通過神經網絡進行識别
%分段檢測長度
Len = 50;
Features = cell(1,50);
Features2= [];
for i = 1:50
i
%每段航迹進行等比例劃分
tmps = Datas{i};
Feature = [];
for j = 1:floor(length(tmps)/Len)
tmps2 = tmps(Len*(j-1)+1:Len*j,:);
%特征提取
Feature = [Feature;[func_feature1(tmps2(:,1)),func_feature1(tmps2(:,2))]];
end
Features{i} = Feature;
Features2 = [Features2;Feature];
end
%異常和正常分類
load fenlei.mat%這個是自己首先做的人工區分,分為正常和異常兩類
Lend = length(cidx)
index= randperm(Lend);
Type1 = [];
Type2 = [];
for i = 1:floor(0.8*length(cidx))
if cidx(index(i)) == 1
Type1 = [Type1;Features2(index(i),:)];
else
Type2 = [Type2;Features2(index(i),:)];
end
end
%訓練器,随機選擇一部分進行訓練
Train_data = [Type1;Type2];
Train_Label= [ones(1,length(Type1)),2*ones(1,length(Type2))]';
%%
if SEL == 1
%1:bp網絡
net = newff(Train_data',Train_Label',128);
net.trainParam.epochs = 60; %訓練次數
net.trainParam.goal = 1e-4; %誤差期望值
net.trainParam.mu = 0.01; %定義神經網絡學習率
net.trainParam.min_grad = 1e-8; %定義神經網絡最小梯度值
%returns of the train:
%net--New network
%tr--Training record (epoch and perf).
%Y--Network outputs.
%E--Network errors.
[net,tr,Y,E] = train(net,Train_data',Train_Label');
save Net_BP.mat net
end
if SEL == 2
%GRNN
net = newgrnn(Train_data',Train_Label',0.000025);
save Net_GRNN.mat net
end
if SEL == 3
%RBF
net = newrb(Train_data',Train_Label',0.04);
save Net_RBF.mat net
end