本文主要是根据《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代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25% 创建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:10 label(:,(400*(j-1)+1):400*j)= repmat( eye_sam(:,j),1,400 ); end T=label'; xlswrite('D:DocumentsMATLABlabel.xls',T); for j=1:10 label2(:,(100*(j-1)+1):100*j)= repmat( eye_sam(:,j),1,100 ); end T2=label2'; xlswrite('D:DocumentsMATLABlabel2.xls',T2);
getdata.m代码修改:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41function[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:9 for j=0:399 x=im2double(imread(strcat('D:DocumentsMATLABimages4000',num2str(i),'_', num2str(j),'.bmp'))); x=reshape(x,784,1); % 将28*28的数值矩阵变为784*1,每列代表一幅图 x_train = [x_train,x]; % 每循环一次加入一列数据 end end x_test =[]; for i=0:9 for j=401:500 x=im2double(imread(strcat('D:DocumentsMATLABimages_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
最后
以上就是默默方盒最近收集整理的关于MATLAB手写数字识别简介标签制作的全部内容,更多相关MATLAB手写数字识别简介标签制作内容请搜索靠谱客的其他文章。
发表评论 取消回复