当前位置: 首页>編程日記>正文

MATLAB手写数字识别

MATLAB手写数字识别

本文主要是根据《matlab手写神经网络实现识别手写数字》博客中的代码进行试验。由于没有数据集,所以采用了MNIST数据集进行代码的运行。数据集不同所以需要对代码进行微小改动。

简介

数据处理:4000张作为训练样本,1000张作为测试样本;
图像大小:图片的灰度值矩阵(28,28);
图像名称:由标签和顺序号组成。标签_顺序号.bmp
训练样本:每个数字的图像名称的顺序号是从0-399,各400个。
在这里插入图片描述
测试样本:每个数字的图像名称的顺序号是从401-500,各100个。
在这里插入图片描述

标签制作

标签格式:
训练数据集中前400个标签都是[1,0,0,0,0,0,0,0,0,0]代表数字0,401-800个标签都是[0,1,0,0,0,0,0,0,0,0]代表数字2,其余类推。这也就是所谓的onehot
由于数据集不同,图像的格式也不一样等因素,需要对代码稍微做修改,具体如下:
制作label时遇到的障碍,xlswrite()函数在写入矩阵时对矩阵大小有限制,一定要小心,因为我的电脑安装的是2003,所以无法对4000列数据直接写入,只好行列互换后再存储,代码将生成两个xsl文件,分别是label.xsl和label2.xsl,分别是训练数据和测试数据的标签。
增加一个label_create.m文件,用来新建标签文件。
label_create.m代码:

% 创建Excel存储label
% 根据图片的名字,例如:3_101.bmp,第一个数值是标签,第二个是图片数。
% 为了转换成神经网络的标签,0-9这10个标签应转换为[1,0,0,0,0,0,0,0,0,0],[0,1,0,0,0,0,0,0,0,0]
% 这样的格式,即第几位是1就代表标签是几?如[0,1,0,0,0,0,0,0,0,0]代表2
% 例如我们的前 400个图都是0,所以标签都是[1,0,0,0,0,0,0,0,0,0]
% 因为每个版本的Excel允许存储的行列不同,这里是2003版存储不下4000列,故需要将label矩阵转置后才能存下
% Excel2003可存储:65536*256
clear all;
clc;
label=zeros(10,4000);
label2=zeros(10,1000);eye_sam=eye(10);
for j=1:10label(:,(400*(j-1)+1):400*j)= repmat( eye_sam(:,j),1,400 );
end
T=label';
xlswrite('D:\Documents\MATLAB\label.xls',T);for j=1:10label2(:,(100*(j-1)+1):100*j)= repmat( eye_sam(:,j),1,100 );
end
T2=label2';
xlswrite('D:\Documents\MATLAB\label2.xls',T2);

getdata.m代码修改:

function[x_train,y_train,x_test,y_test]=getdata()
% 把图片变成像素矩阵
% path :图片路径 
% x_train:训练样本像素矩阵(784,4000)
% y_train:训练样本标签(10,4000)
% x_test:测试样本像素矩阵(784,1000)
% y_test:测试样本标签(10,1000)x_train = [];
for i=0:9for j=0:399x=im2double(imread(strcat('D:\Documents\MATLAB\images4000\',num2str(i),'_', num2str(j),'.bmp')));x=reshape(x,784,1);         % 将28*28的数值矩阵变为784*1,每列代表一幅图x_train = [x_train,x];      % 每循环一次加入一列数据end
endx_test =[];
for i=0:9for j=401:500x=im2double(imread(strcat('D:\Documents\MATLAB\images_test1000\',num2str(i),'_', num2str(j),'.bmp')));x=reshape(x,784,1);         % 将28*28的数值矩阵变为784*1,每列代表一幅图x_test = [x_test,x];        % 每循环一次加入一列数据end
end% 读取标签文件,注意:由于标签的存储问题,读入后需要进行转置
data=xlsread('label.xls');
data2=xlsread('label2.xls');
y_train=data';
y_test = data2';% 返回的参数
x_train;
y_train;
x_test;
y_test;end

其余代码保持和原博客中的一致。全部文件如下图:
在这里插入图片描述
运行main.m文件即可。

文件下载地址:链接:https://pan.baidu.com/s/1JhPs94qO-7VkPI_kknv_Tg
提取码:xuu6
如链接失效可加QQ:1021288218 索取。

参考:
https://blog.csdn.net/yunyunyx/article/details/80473532


https://www.fengoutiyan.com/post/14861.html

相关文章:

  • matlab字符
  • 数字手写模式
  • matlab找出所有数字字符
  • matlab如何提取字符串中的数字
  • 手写数字1
  • matlab输入数字
  • 手写文字识别软件
  • 数字图像处理matlab
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機