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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 精选目标检测3——yolo1、yolo2、yolo3和SSD的网络结构汇总对比

    精选目标检测3——yolo1、yolo2、yolo3和SSD的网络结构汇总对比学习前言各个网络的结构图与其实现代码1、yolo12、yolo23、yolo34、SSD总结学习前言……最近在学习yolo1、yolo2和yolo3,事实上它们和SSD网络有一定的相似性,我准备汇总一下,看看有什么差别。各个网络的结构图与其实现代码1、yolo1在这里插入图片描述由图可见,其进行了二十多次卷积还有四次最大池化,其中3×3卷积用于提取特征,1×1卷积用于压缩特征,最后将图像压缩到7x7xfilter的大小,相当于将整个图像划分为7×7

    2022年6月15日
    32
  • UFT使用技巧

    UFT使用技巧1 UFT基本功能的使用         UFT的基本功能包括两大部分:一部分是提供给初级用户使用的关键字视图;另一部分是提供给熟悉VBScript脚本编写的自动化测试工程师使用的专家视图。但是,并没有严格的区分,在实际的自动化测试项目中完全可以两者结合着使用。 1.1 UFT自动化测试的基本过程          使用UFT进行自动化测试的基本过程与使用其他自动化测试工具进行自动化功能测试的过…

    2022年5月26日
    190
  • sap 获取计划订单bapi_PP 常用bapi

    sap 获取计划订单bapi_PP 常用bapiBAPI:在SAP中可以允许使用BAPI访问标准功能,这些接口可以由外部应用程序开发的客户和配套软件的合作伙伴以及其他SAP应用程序使用。定义SAP业务对象类型的API方法,这些对象类型范围内的业务框架,用于基于对象的组件之间的通信。业务对象和他们的BAPI使面向对象是公司在中央信息处理。例如,现有的功能和数据可重复使用,无故障的技术可以实现的互操作性和非SAP组件可以实现。应用程序可以使用BAP…

    2022年7月24日
    19
  • HOJ2275 Number sequence

    HOJ2275 Number sequence

    2022年1月17日
    51
  • pytorch-DataLoader(数据迭代器)

    pytorch-DataLoader(数据迭代器)目录1.1dataset1.1.1Map-styledatasets实现方法一(简单直白法)实现方法二(借助TensorDataset直接将数据包装成dataset类)实现方法三(地址读取法)1.1.1Iterable-styledatasets我们一般使用一个for循环(或多层的)来训练神经网络,每一次迭代,加载一个batch的数据,神经网络前向反向传播各一次并更新一次参数。而这个过程中加载一个batch的数据这一步需要使用一个torch.utils.data.DataLoader对象,并且

    2022年6月11日
    76
  • LoadRunner 11 安装及激活成功教程

    LoadRunner 11 安装及激活成功教程注意事项:  安装前,把所有的杀毒软件和防火墙关闭。  若以前安装过LoadRunner,则将其卸载。  安装路径不要带中文字符。  如果系统为WIN7,旗舰版才能安装。  安装完毕,需激活成功教程

    2022年7月22日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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