【深度学习入门教程】手写数字项目实现-1.数据集介绍

  • 1. 项目简介
  • 2. 数据集介绍
  • 3. 数据集文件读取

1. 项目简介

  手写数字识别是指给定一系列的手写数字图片以及对应的数字标签,构建模型进行学习,目标是对于一张新的手写数字图片能够自动识别出对应的数字。图像识别是指利用计算机对图像进行处理,通过模型对其分析和理解,得到图片文件中所写的数字。

  在人工智能领域,手写数字识别被问题转换为自动分类问题。将0~9之内的10个数字分为10类,通过模型训练,实现对数字图片的分类,间接获取数字图片上的手写数字。

  该项目所用到的源码以及所有源码均在GitHub以及Gitee上面开源,下载方式:

GitHub:
git clone https://github.com/guojin-yan/MNIST_demo.gitGitee:
git clone https://gitee.com/guojin-yan/MNIST_demo.git

2. 数据集介绍

  MNIST数据集是一个公开手手写数字识别数据集,该数据集由250个不同的人手写而成,总共有7000张手写数据集。其中训练集有6000张,测试集有1000张。每张图片大小为28x28,为处理后的灰度图,是由28x28个像素点组成。

  上图为手写数字数据集中的部分图片。该数据集可以通过以下路径进行下载:MNIST (http://yann.lecun.com/exdb/mnist/) ;或者通过各种深度学习框架提供的API函数进行下载。

  通过官网下载的方式需要分别下载下图中的四个链接对应的文件,下载完成后,将文件解压到本地即可。

  下图为解压好的文件,该文件为处理后的二进制文件,不是现成的图片文件,不可以直接打开,需要进行处理才可以读取,后面会在详细讲解该文件的读取方式。

3. 数据集文件读取

  数据集文件主要分两种:一种是图片数据文件,一种是分类标注文件。文件为二进制文件格式。
  以训练集文件为例:train-images-idx3-ubyte,该文件为保存的二值化后的手写数字图片数据,大小为28×28×1。我们通过Matlab读取数据文件:

% 打开二进制文件
fid = fopen('train-images-idx3-ubyte', 'rb');
% 读取二进制文件,数据格式为uint8,将所有数据读取到train_images_data中
train_images_data = fread(fid, inf, 'uint8', 'l');
% 前16个数据去掉
train_images_data = train_images_data(17:end);
% 关闭文件
fclose(fid);
% 将数据矩阵转为28×28×60000
train_images = reshape(train_images_data,28,28,60000);
% 交换前两维度,不然图片是反的
train_images = permute(train_images,[2 1 3]);
% 将数据维度转为28×28×1×60000
train_X(:,:,1,:) = train_images;

  经过上面读取后,我们可以获得28×28×1×60000的数据矩阵,其中28×28×1为一张图片,总共有60000张图片。
  下面我们读取训练集的标注文件:train-labels-idx1-ubyte 存储了训练集的标注情况。

% 文件读取方式与上面一致
fid = fopen('dataset\train-labels-idx1-ubyte', 'rb');
train_labels = fread(fid, inf, 'uint8', 'l');
% 标注文件是从第9个开始读取,与上面图片数据的顺序一致
train_labels = train_labels(9:end);
fclose(fid);

  如果我们想通过Python实现数据文件读取,首先导入以下模块:

import numpy as np
import structfrom PIL import Image
import os

  下面为训练集图片数据以及标签数据读取方式:

# 根目录
home_path = 'E:\Git_space\手写数字识别\Datasets'# 图片文件地址
image_file =  os.path.join(home_path, 'MNIST\\raw\\train-images-idx3-ubyte') # 数据文件大小为:28×28×1×60000+16 = 47040016
image_data_size = 47040016
# 有效文件数据为: 28×28×1×60000 = 47040000
image_data_size = str(image_data_size - 16) + 'B'
# 打开文件
image_data_buffer = open(image_file, 'rb').read()
# 获取图片缓冲内存数据中的图片数量、行数、列数
magic, numImages, numRows, numColumns = struct.unpack_from('>IIII', image_data_buffer, 0)
# 读取图片文件的数据
image_datas = struct.unpack_from('>' + image_data_size, image_data_buffer, struct.calcsize('>IIII'))
# 将图片数据转为uint8格式,转为[numImages, 1, numRows, numColumns]大小的矩阵
image_datas = np.array(image_datas).astype(np.uint8).reshape(numImages, 1, numRows, numColumns)# 标签文件地址
label_file = os.path.join(home_path, 'MNIST\\raw\\train-labels-idx1-ubyte' )# 标签文件长:60000+8 = 60008
label_data_size = 60008
# 实际标签文件长:60000+8 = 60008
label_data_size = str(label_data_size - 8) + 'B'label_data_buffer = open(label_file, 'rb').read()
magic, numLabels = struct.unpack_from('>II', label_data_buffer, 0)
label_datas = struct.unpack_from('>' + label_data_size, label_data_buffer, struct.calcsize('>II'))
label_datas = np.array(label_datas).astype(np.int64)

  测试集读取方式类似,如有需要自行修改。

【深度学习案例】手写数字项目实现-1.数据集介绍相关推荐

  1. 03_深度学习实现手写数字识别(python)

    本次项目采用了多种模型进行测试,并尝试策略来提升模型的泛化能力,最终取得了99.67%的准确率,并采用pyqt5来制作可视化GUI界面进行呈现.具体代码已经开源. 代码详情见附录 1简介 早在1998 ...

  2. 基于深度学习的手写数字识别Matlab实现

    基于深度学习的手写数字识别Matlab实现 1.网络设计 2. 训练方法 3.实验结果 4.实验结果分析 5.结论 1.网络设计 1.1 CNN(特征提取网络+分类网络) 随着深度学习的迅猛发展,其应 ...

  3. 百度飞桨PaddelePaddle-21天零基础实践深度学习-【手写数字任务】2

    百度飞桨PaddelePaddle-21天零基础实践深度学习-[手写数字任务]2 模型设计 网络结构 损失函数 训练配置 优化算法 模型设计 网络结构 全连接神经网络 经典的全连接神经网络来包含四层网 ...

  4. 基于深度学习的手写数字识别算法Python实现

    摘 要 深度学习是传统机器学习下的一个分支,得益于近些年来计算机硬件计算能力质的飞跃,使得深度学习成为了当下热门之一.手写数字识别更是深度学习入门的经典案例,学习和理解其背后的原理对于深度学习的理解有 ...

  5. Python基于深度学习的手写数字识别

    Python基于深度学习的手写数字识别 1.代码的功能和运行方法 2. 网络设计 3.训练方法 4.实验结果分析 5.结论 1.代码的功能和运行方法 代码可以实现任意数字0-9的识别,只需要将图片载入 ...

  6. 基于深度学习的手写数字识别、python实现

    基于深度学习的手写数字识别.python实现 一.what is 深度学习 二.加深层可以减少网络的参数数量 三.深度学习的手写数字识别 一.what is 深度学习 深度学习是加深了层的深度神经网络 ...

  7. 【深度学习】手写数字识别Tensorflow2实验报告

    实验一:手写数字识别 一.实验目的 利用深度学习实现手写数字识别,当输入一张手写图片后,能够准确的识别出该图片中数字是几.输出内容是0.1.2.3.4.5.6.7.8.9的其中一个. 二.实验原理 ( ...

  8. Python实现深度学习MNIST手写数字识别(单文件,非框架,无需GPU,适合初学者)

    注: 本文根据阿卡蒂奥的Python深度学习博客文章代码进行调整,修复了少量问题,原文地址:https://blog.csdn.net/akadiao/article/details/78175737 ...

  9. 【每日一更】<深度学习>手写数字识别 - Hand-Written Digits Recognition

    目录 一.手写数字识别概述: 二.Input and Output: 三.入门案例-简单数据训练: 1.数据集的准备: 一.手写数字识别概述: 数据集:MNIST 使用灰度图片处理,得到一个28行28 ...

  10. 深度学习数字仪表盘识别_深度学习之手写数字识别项目(Sequential方法amp;Class方法进阶版)...

    此项目使用LeNet模型针对手写数字进行分类.项目中我们分别采用了顺序式API和子类方法两种方式构建了LeNet模型训练mnist数据集,并编写了给图识物应用程序用于手写数字识别. 一.LeNet模型 ...

最新文章

  1. 【FFmpeg】降低转码延迟方法、打印信息详解、refcounted_frames详解
  2. win10服务器权限修改时间,win10系统修改时间显示没权限的解决方案
  3. python 检验数据正态分布程度_Python DataFrame 检验数据正态分布及平均值差异检验...
  4. 数据安全最佳实践案例库建设项目正式启动
  5. IE6-IE9不支持table.innerHTML的解决方法分享
  6. P3273-[SCOI2011]棘手的操作【线段树,并查集】
  7. poj 1436 Horizontally Visible Segments
  8. Memcahce(MC)系列(三)Memcached它PHP转让
  9. C#之DotfuscatorCommunity
  10. 药企常用计算机化系统,基于GAMP5的我国制药企业计算机化系统验证的应用研究.pdf...
  11. RPL(8):RFC6550翻译(8)---下行路由
  12. 百分点大数据技术团队:互联网舆情系统的架构实践
  13. 一个强迫症的电脑上(桌面篇)
  14. 水星路由器DNS服务器未响应,新买的水星(MERCURY)路由器怎么设置?
  15. mongoose 与 mylab 的使用 (1)
  16. SQUIRREL语言
  17. 反编译 APKTool 逆向助手
  18. dom4j读取xml
  19. Android获取屏幕信息的几种方式
  20. AWC / Advanced SystemCare Pro(专业版)V3.7.0+有效注册码

热门文章

  1. matlab 一个简单的FIR低通滤波器设计例子
  2. 人生之路1.20代码 第五部分
  3. 黄杏元《地理信息系统概论》考研复习考点精讲(三)
  4. 元器件及测量基础实验
  5. 推荐五个免费UML建模工具
  6. 学习《华为基本法》(4):组织结构管理原则
  7. Ribbon界面制作
  8. my ReadBook_wangluoyingxiaoyucehua / network marketing / wangluoyingxiao
  9. dumpDex脱壳教程
  10. Linux学习基础一 【安装 目录 系统命令 常用vim操作】