【手寫數字識別】基於matlab RBF手寫數字識別【含Matlab原始碼 471期】
阿新 • • 發佈:2021-06-28
一、簡介
RBF神將網路是一種三層神經網路,其包括輸入層、隱層、輸出層。從輸入空間到隱層空間的變換是非線性的,而從隱層空間到輸出層空間變換是線性的。流圖如下:
RBF網路的基本思想是:用RBF作為隱單元的“基”構成隱含層空間,這樣就可以將輸入向量直接對映到隱空間,而不需要通過權連線。當RBF的中心點確定以後,這種對映關係也就確定了。而隱含層空間到輸出空間的對映是線性的,即網路的輸出是隱單元輸出的線性加權和,此處的權即為網路可調引數。其中,隱含層的作用是把向量從低維度的p對映到高維度的h,這樣低維度線性不可分的情況到高維度就可以變得線性可分了,主要就是核函式的思想。這樣,網路由輸入到輸出的對映是非線性的,而網路輸出對可調引數而言卻又是線性的。網路的權就可由線性方程組直接解出,從而大大加快學習速度並避免區域性極小問題。
2 RBF神經網路的學習問題
二、原始碼
clear clc I=imread('sample3.bmp'); A=GetFeature(I); %將影象分為25塊,計算每一塊的空白部分所佔比例 function data=GetFeature(I) [row,col]=find(I==0); %返回數字的上下左右的邊界 I=I(min(row):max(row),min(col):max(col)); %擷取手寫數字影象,使其緊包含數字邊界,不包含多餘的空白 imwrite(I,'您手寫的字.bmp','bmp'); %儲存擷取後的手寫數字影象 [row,col]=size(I); r=fix(row/5); %為分25塊做準備 c=fix(col/5); sum=0; %計算空白塊數目 k=1; feature=[]; for i=1:r:5*r %先從行開始計算 for j=1:c:5*c %保持行不變,先計算列 for m=i:i+r-1 for n=j:j+c-1 if I(m,n)==0 sum=sum+1; %每一塊空白的畫素塊的數目 end end end data(k)=sum/(r*c); %第k個特徵分量,即第k塊的空白率,k最大為25 sum=0; k=k+1; end function y = rbfnettest( sample ) load template pattern; c=0; for i=1:10 for j=1:210 c=c+1; p(:,c)=pattern(i).feature(:,j); end end
三、執行結果
四、備註
版本:2014a
完整程式碼或代寫加1564658423