matlab手写数字识别实验报告_如何用matlab将图像转为矩阵

matlab手写数字识别实验报告_如何用matlab将图像转为矩阵本文主要是根据《matlab手写神经网络实现识别手写数字》博客中的代码进行试验。由于没有数据集,所以采用了MNIST数据集进行代码的运行。数据集不同所以需要对代码进行微小改动。简介数据处理:4000张作为训练样本,1000张作为测试样本;图像大小:图片的灰度值矩阵(28,28);图像名称:由标签和顺序号组成。标签_顺序号.bmp训练样本:每个数字的图像名称的顺序号是从0-399,各400…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

本文主要是根据《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:10
    label(:,(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:10
    label2(:,(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:9
    for j=0:399
        x=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
end

x_test =[];
for i=0:9
    for j=401:500
        x=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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/193856.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 谷歌清楚缓存快捷键_清除浏览器缓存的快捷键是什么

    谷歌清楚缓存快捷键_清除浏览器缓存的快捷键是什么我们经常会遇到这些情况,浏览器打开网页打不开,打开网页老是在加载。尤其是在我们在做网页设计的时候,经常预览结果往往没有出现我们想要的结果,很大可能性就是浏览器的缓存没有清除引起的。那么清除浏览器缓存的快捷键是什么呢?佰佰安全网就带大家来了解一下这些打开浏览器,按Ctrl+Shift+Delete,就会出现清除浏览器缓存的框,你可以选择你要清理的东西,点击ok,一切搞定。各种浏览器清除缓存数据的方法…

  • linux双网卡架设FTP,LINUX系统上架设FTP服务器[通俗易懂]

    linux双网卡架设FTP,LINUX系统上架设FTP服务器[通俗易懂]CentOS上搭建FTP服务器服务器软件:vsftpd简要说明:vsftpd是linux下的一款小巧轻快,安全易用的FTP服务器软件,是一款在各个LINUX发行版中最受推崇的FTP服务器软件。至于它的安装教程,网络上也是数不胜数,每个教程都有各自的优缺点,祥哥特意做了个总结,取别人之长处,尽量做到菜鸟级别的教程。当你看见祥哥的这篇文章,能更好的使用和运用VSFTPD。下面正题开始。安装vsftpd…

  • 史上最全的数字IC后端设计实现培训教程(整理版)

    史上最全的数字IC后端设计实现培训教程(整理版)史上最全的数字IC后端设计实现培训教程(整理版)由于最近比较忙,前几天才把五月份开展活动送的书全部寄出,预计最迟明后天就会送到各位手中,希望各位多多理解!本次活动共送出八本《LowPowerFlow》PhysicalImplementation(BackEnd)纸质书籍,请各位中奖的朋友注意查收!另外本次小编多打印了五六本,有需要的朋友可以按照成本价送出(小编微信ic-backend2018)。鉴于很多小伙伴们经常苦于找各类数字IC后端实现培训教程和培训视频,今天小编特此整理了一份非常全

  • autossh

    autosshautossh用来帮助ssh程序在中断后自动重连,在建立隧道的场合相当好用使用autossh可以进行内网穿透

    2022年10月22日
  • 信息熵和基尼系数_信息熵和基尼系数

    信息熵和基尼系数_信息熵和基尼系数一、基尼系数是什么?1)定义    下面是摘自李航《统计学习方法》中基尼系数的定义,非常清晰。2)基尼系数有什么意义?    我们可以先来看一组数据X的取值 方案一 方案二 方案三 方案四 P的平方 方案一 方案二 方案三 方案四类别一 0.9 0.5 0.4 0.2 p1^2 0.81 0.25 0.16 0.04类别二 0.1 0.5 0.3 0.2 p2^2 0.01 0.25 0.09 0…

    2022年10月10日
  • IOC控制反转与DI依赖注入

    IOC控制反转与DI依赖注入新建UserDao接口新建UserDaoImpl实现类IOC控制反转与DI依赖注入~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~开发工具与关键技术:IntellijIDEASpring作者:周欢撰写时间:2021/1/19~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~IOC(控制反转)作用:实现将组件间的关系从程序内部提…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号