首页 > 其他分享 >基于神经网络应用于手写数字识别-matlab

基于神经网络应用于手写数字识别-matlab

时间:2024-10-26 18:17:24浏览次数:7  
标签:10 end 网络应用 label 神经网络 train matlab 手写 data

运用matlab编程进行神经网络进行手写数字识别。

实验过程:

一、BP神经网络

神经网络是由很多神经元组成,可以分为输入,输出,隐含层。

BP神经网络的特点:信号前向传递,信号反向传播。若输出存在误差,根据误差调整权值和阈值,使网络的输出接近预期。

在用BP神经网络进行预测之前要训练网络训练过程如下:

1.网络初始化:各个参数的确定包括输入,输出,隐含层的节点数,输入和隐含,隐含和输出层之间的权值,隐含,输出层的阈值,学习速度和激励函数。

2.计算隐含层输出

3.计算输出层输出

4.误差计算

5.权值更新

6.阈值更新

7.判断迭代是否结束

二、模型建立

数据集介绍:

数据集包含0-9这10个数字的手写体。是放在10个文件夹里,文件夹的名称对应存放的手写数字图片的数字,每个数字500张,每张图片的像素统一为28*28。

识别流程:

首先要对数据进行处理,这个主要是批量读取图片和特征提取的过程,特征提取的方法很多,这里只挑选最简单的来实现,然后是训练出一个神经网络的模型,最后用测试数据进行测试。为了方面,这里的神经网络的创建,训练和测试采用matlab函数来实现。

运行流程:

1.确定神经网络的输入,输出。

输入是BP神经网络很重要的方面,输入的数据是手写字符经过预处理和特征提取后的数据。预处理有二值化,裁剪掉空白的区域,然后再统一大小为70*50为特征提取做准备。特征提取采用的是粗网格特征提取,把图像分成35个区域,每个区域100像素,统计区域中1像素所占的比例。经过预处理特征提取后,28*28图像转成1*35的特征矢量。提取完5000张图片后,依次把所有的特征存于一个矩阵(35*5000)中。

2.神经的网络的训练

用matlab的rands函数来实现网络权值的初始化,网络结构为输入层35,隐藏层34,输出层10,学习速率为,隐藏层激励函数为sigmoid函数。随机抽取4500张图片提取特征后输入,按照公式计算隐含层和输出层输出,误差,更新网络权值。

3.神经网络的预测

训练好神经网络之后,用随机抽取的500个数字字符对网络进行预测,输入特征向量,计算隐含层和输出层输出,得到最后预测的数据。同时计算每个数字的正确率和全体的正确率。最后得到的总体正确率为。

主函数:

clc;

clear all;

close all;

%% 读取图像

root='./data';

img=read_train(root);

%% 提取特征

img_feature=feature_lattice(img);

%% 构造标签

class=10;

numberpclass=500;

ann_label=zeros(class,numberpclass*class);

ann_data=img_feature;

for i=1:class

 for j=numberpclass*(i-1)+1:numberpclass*i

     ann_label(i,j)=1;

 end

end

%% 选定训练集和测试集

k=rand(1,numberpclass*class);  

[m,n]=sort(k);  

ntraindata=4500;

ntestdata=500;

train_data=ann_data(:,n(1:ntraindata));

test_data=ann_data(:,n(ntraindata+1:numberpclass*class));

train_label=ann_label(:,n(1:ntraindata));

test_label=ann_label(:,n(ntraindata+1:numberpclass*class));

%% BP神经网络创建,训练和测试

net=network_train(train_data,train_label);

predict_label=network_test(test_data,net);

%% 正确率计算

[u,v]=find(test_label==1);

label=u';

error=label-predict_label;

accuracy=size(find(error==0),2)/size(label,2)

批量读取图片函数:

文件存放特点:在data下有10个子文件夹,每个子文件夹下有500张图片。函数可以利用于任何批量图片的读取,传入的是文件夹路径,输出的是一个n(对应图片数目)维cell,每个cell存放的是图片的数据。

function [imglist] = read_train(root)

%========读取文件夹========%

out_Files = dir(root);%展开

tempind=0;

imglist=cell(0);

n=length(out_Files);

%========读取文件========%

for i = 1:n;

    if strcmp(out_Files(i).name,'.')|| strcmp(out_Files(i).name,'..')

    else

        rootpath=strcat(root,'/',out_Files(i).name);

        in_filelist=dir(rootpath);

        ni=length(in_filelist);

        for j=1:ni

            if strcmp(in_filelist(j).name,'.')|| strcmp(in_filelist(j).name,'..')|| strcmp(in_filelist(j).name,'')|| strcmp(in_filelist(j).name,'')

            else

                tempind=tempind+1;

                imglist{tempind}=imread(strcat(rootpath,'/',in_filelist(j).name));

            end

        end

    end

end

end

特征提取函数:

提取所有图像的特征,二值化—resize-提取特征

function feature = feature_lattice(img)

% 输入:黑底白字的二值图像。输出:35维的网格特征

% ======提取特征,转成5*7的特征矢量,把图像中每10*10的点进行划分相加,进行相加成一个点=====%

%======即统计每个小区域中图像象素所占百分比作为特征数据====%

for i=1:length(img);

bw2=im2bw(img{i},graythresh(img{i}));

bw_7050=imresize(bw2,[70,50]);

for cnt=1:7

    for cnt2=1:5

        Atemp=sum(bw_7050(((cnt*10-9):(cnt*10)),((cnt2*10-9):(cnt2*10))));%10*10box

        lett((cnt-1)*5+cnt2)=sum(Atemp);

    end

end

lett=((100-lett)/100);

lett=lett';

feature(:,i)=lett;

end

构造标签:

要构造出适合神经网络的标签,在这个例子中有10个类,若为某个标签,那么这个位置的值为1,其余为0。

BP神经网络创建,训练和测试:

主要是几个参数的设置,layer隐含层的神经元个数。trainFcn:训练算法

function net = network_train(train_data,train_label )

% 输入:训练图像特征和label。输出:训练好的神经网络

% BP网络训练

% 初始化网络结构

layer=25;

net=newff(train_data,train_label,layer);

'trainrp';

% 网络训练

net=train(net,train_data,train_label);

end

function out = network_test(test_data,net)

%% BP网络预测

an=sim(net,test_data);

for i=1:length(test_data)

    out(i)=find(an(:,i)==max(an(:,i)));

end

end

实验结果:

标签:10,end,网络应用,label,神经网络,train,matlab,手写,data
From: https://blog.csdn.net/2401_84170369/article/details/143257571

相关文章

  • 基于数字图像matlab-运动物体检测
                            目录一.课程设计任务二.课程设计原理及设计方案1三.课程设计的步骤和结果四.设计体会4五.参考文献5             一 课程设计任务    在视频监控领域,需要对监控画面进行存储。长时间......
  • (49)MATLAB实现迫零均衡器原理与代码
    文章目录前言一、迫零均衡器设计说明二、迫零均衡器MATLAB源代码1.函数说明2.代码实现3.辅助函数前言使用MATLAB实现迫零均衡器。给出完整的MATLAB设计源代码。一、迫零均衡器设计说明理想的迫零均衡器有无限多个抽头权系数,是不能实现的,本文考虑有2M+1个抽头权......
  • 基于圆柱体镜子和光线跟踪实现镜反射观测全景观图的matlab模拟仿真
    1.程序功能描述基于圆柱体镜子和光线跟踪实现镜反射观测全景观图.模拟的场景如下所示: 2.测试软件版本以及运行结果展示MATLAB2022a版本运行 3.核心程序%%step1fori=1:mmx_new(i)=i-round(mm/2);endfori=1:nny_new(i)=i-round(nn/2);......
  • 基于BP译码的LDPC误码率matlab仿真,分析码长,码率,信道对译码性能的影响,对比卷积码,t
    1.算法仿真效果       本程序系统是《m基于BP译码的LDPC误码率matlab仿真,分析不同码长,码率,信道对译码性能的影响,对比卷积码,turbo码》的的升级。 升级前原文章链接 增加了更多的不同码长,不同码率,不同信道对LDPC译码性能的影响,并增加了BCH编译码的对比。 matl......
  • 学习笔记489—MATLAB针对大于2GB变量保存的问题
    MATLAB针对大于2GB变量保存的问题新安装的MATLAB中保存2GB以上大小的数据时会出现如下警告:未保存变量xx,对于大于2GB的变量,请使用MAT-file版本7.3或更高版本。其解决方案是:进入MATLAB主页,点击“预设”选项:点击常规后,点击MAT-File,选择第一个格式即可。 参考链接:https:/......
  • 基于BP译码的LDPC误码率matlab仿真,分析码长,码率,信道对译码性能的影响,对比卷积码,t
    1.算法仿真效果本程序系统是《m基于BP译码的LDPC误码率matlab仿真,分析不同码长,码率,信道对译码性能的影响,对比卷积码,turbo码》的的升级。升级前原文章链接增加了更多的不同码长,不同码率,不同信道对LDPC译码性能的影响,并增加了BCH编译码的对比。matlab2022a仿真结果如下(完整......
  • 基于遗传算法的智能天线最佳阵列因子计算matlab仿真
    1.课题概述      基于遗传算法的智能天线最佳阵列因子计算。智能天线技术利用自适应阵列处理技术改善无线通信系统的性能,尤其是提高接收信号质量、抑制干扰和增强定位能力。在智能天线的设计中,阵列因子(也称加权向量或波束形成向量)的选择至关重要,它直接影响了阵列的方向性......
  • 基于贝叶斯优化卷积神经网络(Bayes-CNN)的多因子数据分类识别算法matlab仿真
    1.算法运行效果图预览(完整程序运行后无水印) 贝叶斯优化过程  贝叶斯优化后的CNN训练和识别结果 标准的CNN的识别结果 2.算法运行软件版本matlab2022a 3.部分核心程序(完整版代码包含详细中文注释和操作步骤视频)%使用贝叶斯优化算法确定最优的批......
  • 我嘞个超绝MATLAB——矩阵
    矩阵的建立我们创建矩阵有三种方法:直接输入法函数创建法文件导入直接输入法就是将矩阵直接输入,这种方法适合矩阵数不多的时候使用直接输入要用[]当标识符号,所有元素都必须在[]中,元素和元素之间用空格或逗号链接,行与行之间用分号或回车链接函数创建法要想用函数输......
  • 考虑阶梯式碳交易与供需灵活双响应的综合能源系统优化调度(Matlab代码实现)
     ......