码迷,mamicode.com
首页 > 其他好文 > 详细

【手写数字识别】基于matlab RBF手写数字识别【含Matlab源码 471期】

时间:2021-06-28 21:03:11      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:速度   变换   ==   lazy   源码   data   运行   基本   结果   

一、简介

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

【手写数字识别】基于matlab RBF手写数字识别【含Matlab源码 471期】

标签:速度   变换   ==   lazy   源码   data   运行   基本   结果   

原文地址:https://www.cnblogs.com/homeofmatlab/p/14944135.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!