Matlab 手写字体识别

忙过这段时间后,对于上次读取的Matlab内部数据实现的识别,我回味了一番,觉得那个实在太小。所以打算把数据换成[MNIST数据集][1]。

基础思想还是相同的,使用TreeBagger(随机森林)的算法来训练样本,从而实现学习并且识别。这一次不会和上次那么草率了….同时分享一些关于TreeBagger的理解。

思想
和我上一个识别花是一样的。使用算法训练训练样本,得到一个模型model,从而使用predict函数根据模型对测试样本进行识别。从而达到手写字体识别的效果。这里我使用了Google实验室的Corinna Cortes和纽约大学柯朗研究所的Yann LeCun的建有一个手写数字数据库,训练库有60,000张手写数字图像,测试库有10,000张。

这是->Mnist数据集官网<-上面有说明。

但是因为这个网站上的四个文件资源似乎不多,导致下载速度很慢,所以我把他们放在我的云盘里,给大家下载。云盘链接 密码:7awp
因为里面的内容全部是用二进制存的,所以我在的文件里也顺便把解压的.m的文件放进去了,也省得大家到处找。

代码实现

因为要导入的图片太多,一开始我使用imread时我发现,imread似乎是按照一个特定的文件名顺序读取文件的,所以对于我这些有顺序的图片,他不能按照顺序读。所以我自己想了个方法来读取60000张训练样本。

for i=1:60000str  = strcat('C:\Users\StevenT\Desktop\mnist数据集\train-images-idx3-ubyte\TrainImage_',num2str(i));name = strcat(str,'.bmp');name = char(name);current_img = imread(name);   %将当前图片赋值给一个变量current_img = reshape(current_img,1,[]); %将矩阵变形train_image(i,:) = current_img;
end

之后用同样的方法获得10000个测试样本。
对于测试标签和训练标签的读取,直接用textread来读取就可以了。

lable_test = textread('C:\Users\StevenT\Desktop\mnist数据集\t10k-labels-idx1-ubyte\test_lable.txt');

读取到样本和标签之后,对样本和标签进行训练。

model = TreeBagger(500,train_image,lable_train); %使用TreeBagger来对训练样本进行训练,获得一个modelresult = predict(model,test_image);  %之后使用model来对测试样本进行预测,将结果存在result内result = cell2mat(result);   %因为result是cell类的,使用cell2mat转换成字符串

最后输出识别率

sc=double(result) - lable_test;
count=sum(sc(:)==48)/100.0;     %sc用来保存相减的结果,当其等于0(ASCII里是48)的时候就是识别正确的结果,最终得出识别率

整体代码

clear all;
clc;%导入训练样本for i=1:60000str  = strcat('C:\Users\StevenT\Desktop\mnist数据集\train-images-idx3-ubyte\TrainImage_',num2str(i));name = strcat(str,'.bmp');name = char(name);current_img = imread(name);current_img = reshape(current_img,1,[]); %将矩阵变形train_image(i,:) = current_img;
end
train_image=double(train_image);%导入测试样本for i=1:10000str  = strcat('C:\Users\StevenT\Desktop\mnist数据集\t10k-images-idx3-ubyte\TestImage_',num2str(i));name = strcat(str,'.bmp');name = char(name);current_img = imread(name);current_img = reshape(current_img,1,[]); %将矩阵变形test_image(i,:) = current_img;
end
test_image=double(test_image);lable_test = textread('C:\Users\StevenT\Desktop\mnist数据集\t10k-labels-idx1-ubyte\test_lable.txt');
lable_train = textread('C:\Users\StevenT\Desktop\mnist数据集\train-labels-idx1-ubyte\train_lable.txt');
% lable_train = lable_train(1:100);
% lable_test = lable_test(1:100);model = TreeBagger(500,train_image,lable_train); %使用TreeBagger来对训练样本进行训练,获得一个modelresult = predict(model,test_image);  %之后使用model来对测试样本进行预测,将结果存在result内result = cell2mat(result);   %因为result是cell类的,使用cell2mat转换成字符串sc=double(result) - lable_test;
count=sum(sc(:)==48)/100.0;     %sc用来保存相减的结果,当其等于0(ASCII里是48)的时候就是识别正确的结果,最终得出识别率

这里请大家把地址改成自己的地址。

这是运行后的工作区

count是识别的准确率,已经达到96.82%了
我的在TreeBagger里用了50棵决策树,同时我也尝试过500棵,讲真跑的很久,但是准确率却只提高了1%,所以我认识到这个决策树的个数是没很大影响的…(我的电脑跑的心好累)

这个例子中最重要的莫过于随机森林TreeBagger这个函数所以我在这里发一份博客,我觉得挺好懂的一份(好吧其实是因为有图)
http://www.36dsj.com/archives/21036

关于算法的问题吧,我觉得如果不是想搞算法开发的,还是会用就好:)

以上就是我做的一个小小的手写识别,后面我会把我的用GUI把自己手写的数字识别出来的小补充发出来。同时呢,正在学习SVM ,过段时间学的好的话,我会这个也发出来~~

大家共勉:)

手写字体识别 --MNIST数据集相关推荐

  1. pytorch实现手写字体识别(Mnist数据集)

    1.加载数据集 一个快速体验学习的小tip在google的云jupyter上做实验,速度快的飞起. import torch from torch.nn import Linear, ReLU imp ...

  2. PyTorch手写字体识别MNIST

    手写字体识别MNIST 1.准备工作 可以看这个老师的视频进行学习,讲解的非常仔细:视频学习 2.项目代码 2.1 导入模块 # 1.加载相关库 import torch import torch.n ...

  3. Pytorch实战1:LeNet手写数字识别 (MNIST数据集)

    版权说明:此文章为本人原创内容,转载请注明出处,谢谢合作! Pytorch实战1:LeNet手写数字识别 (MNIST数据集) 实验环境: Pytorch 0.4.0 torchvision 0.2. ...

  4. 使用Pytorch实现手写数字识别(Mnist数据集)

    目标 知道如何使用Pytorch完成神经网络的构建 知道Pytorch中激活函数的使用方法 知道Pytorch中torchvision.transforms中常见图形处理函数的使用 知道如何训练模型和 ...

  5. Python 手写数字识别 MNIST数据集下载失败

    目录 一.MNIST数据集下载失败 1 失败的解决办法(经验教训): 2 亲测有效的解决方法: 一.MNIST数据集下载失败 场景复现:想要pytorch+MINIST数据集来实现手写数字识别,首先就 ...

  6. 手写数字识别MNIST数据集下载百度网盘链接快速下载

    介绍 MNIST数据集是机器学习领域中非常经典的一个数据集,由60000个训练样本和10000个测试样本组成,每个样本都是一张28 * 28像素的灰度手写数字图片. 下载 官方链接:http://ya ...

  7. python实现lenet_吴裕雄 python 神经网络TensorFlow实现LeNet模型处理手写数字识别MNIST数据集...

    importtensorflow as tf tf.reset_default_graph()#配置神经网络的参数 INPUT_NODE = 784OUTPUT_NODE= 10IMAGE_SIZE= ...

  8. 吴裕雄 python 神经网络——TensorFlow实现AlexNet模型处理手写数字识别MNIST数据集...

    import tensorflow as tf# 输入数据 from tensorflow.examples.tutorials.mnist import input_datamnist = inpu ...

  9. GAN变种ACGAN利用手写数字识别mnist生成手写数字

    1.摘要 本文主要讲解:GAN变种ACGAN利用手写数字识别mnist数据集进行训练,最终生成手写数字图片 主要思路: Initialize generator and discriminator I ...

最新文章

  1. 总监路上的第1年,聊聊几点感受
  2. 易语言---字符串操作
  3. 【CF1063B】Labyrinth [最短路? 01BFS]
  4. 安装python环境与运行_专栏G|轻松学Python01:Python环境搭建与运行
  5. Framework中网络定位服务简介
  6. 最优传输理论和生成模型的几何观点
  7. linux 两个驱动 竞争,Linux设备驱动第五章(并发和竞争)读书笔记(国外英文资料).doc...
  8. linux一键启动,Linux一键启动、停止、重启Tomcat sh脚本
  9. 熟练的运用计算机英语怎么说,对什么运用的熟练用英语怎么说?
  10. java坦克大战图片素材包_坦克大战图片素材
  11. 特殊符号 mysql_mysql 特殊字符
  12. 达人评测 i3 12100F和锐龙r5 5600G 选哪个好
  13. Codevs 1066 引水入城 2010年NOIP全国联赛提高组
  14. python爬虫代理ip_Python爬虫如何获取代理ip及ip验证?
  15. 全网最新最全的jmeter接口测试,压力测试
  16. 中国剩余定理(也叫孙子定理)
  17. android 蓝牙传输文件,android-通过蓝牙发送文件
  18. HDLBITS笔记34:Lemmings1、Lemmings2、Lemmings3、Lemmings4
  19. 更好的确保企业数据安全,华为云数据灾备解决方案更便捷
  20. 干涉仪测向技术matlab算法仿真,相位干涉仪测向算法的Simulink仿真

热门文章

  1. A story about life
  2. (一)计算机取证-WinHex查找隐藏文件
  3. linux 挂载目录
  4. CentOS7下配置域名解析服务器
  5. byebye2014,hello2015
  6. 背包问题记忆化函数实现!!(JavaScript可视化页面展示!)
  7. 华三服务器怎样用hdm安装linux,H3C R4900 G2服务器通过HDM安装系统
  8. OPENNI实践-体感方向盘玩赛车游戏(2)
  9. ASEMI整流二极管A7二极管和M7二极管能代换吗
  10. 前端成神之路-HTML