1. 程式人生 > 其它 >【手寫數字識別】基於matlab RBF手寫數字識別【含Matlab原始碼 471期】

【手寫數字識別】基於matlab RBF手寫數字識別【含Matlab原始碼 471期】

一、簡介

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