mnist手写数字数据集_mnist手写数据集(1. 加载与可视化)

》》欢迎 点赞,留言,收藏加关注《《

1. 模型构建的步骤:

在构建AI模型时,一般有以下主要步骤:准备数据、数据预处理、划分数据集、配置模型、训练模型、评估优化、模型应用,如下图所示:

34dab6d0447805290e9c3d94cde645a6.png

【注意】由于MNIST数据集太经典了,很多深度学习书籍在介绍该入门模型案例时,基本上就是直接下载获取数据,然后就进行模型训练,最后得出一个准确率出来。但这样的入门案例学习后,当要拿自己的数据来训练模型,却往往不知该如何处理数据、如何训练、如何应用。在本文,将分两种情况进行介绍:(1)使用MNIST数据(本案例),(2)使用自己的数据。

2. 库文件的导入

2.1 使用现成的mnist数据

import tensorflow as tf

# 从tensorflow.examples.tutorials.mnist 导入模块

# 这是TensorFlow 为了教学MNIST而提前编制的程序

from tensorflow.examples.tutorials.mnist import input_data

import matplotlib.pyplot as plt

mnist = input_data.read_data_sets('/home/anaconda2/桌面/mnist_practice/MNIST_data',one_hot=True)

# MNIST_data指的是存放数据的文件夹路径,one_hot=True 为采用one_hot的编码方式编码标签

# 从MNIST_data/中读取MNIST数据,这条语句在数据不存在时,会自动执行下载

2.2 使用自己做的数据

如果是使用自己的数据集,在准备数据时的重要工作是“标注数据”,也就是对数据进行打标签,主要的标注方式有:

① 整个文件打标签。例如MNIST数据集,每个图像只有1个数字,可以从0至9建10个文件夹,里面放相应数字的图像;也可以定义一个规则对图像进行命名,如按标签+序号命名;还可以在数据库里面创建一张对应表,存储文件名与标签之间的关联关系。如下图:

b91b12f30c1b516c29066a34afe31b1a.png

② 圈定区域打标签。例如ImageNet的物体识别数据集,由于每张图片上有各种物体,这些物体位于不同位置,因此需要圈定某个区域进行标注,目前比较流行的是VOC2007、VOC2012数据格式,这是使用xml文件保存图片中某个物体的名称(name)和位置信息(xmin,ymin,xmax,ymax)。

如果图片很多,一张一张去计算位置信息,然后编写xml文件,实在是太耗时耗力了。所幸,有一位大神开源了一个数据标注工具labelImg(https://github.com/tzutalin/labelImg),只要在界面上画框标注,就能自动生成VOC格式的xml文件了,非常方便,如下图所示:

0de99e8d5a506181d3767aed75088f86.png

③ 数据截段打标签。针对语音识别、文字识别等,有些是将数据截成一段一段的语音或句子,然后在另外的文件中记录对应的标签信息。

3. 数据预处理

在准备好基础数据之后,需要根据模型需要对基础数据进行相应的预处理。

(1)使用MNIST数据(本案例)

由于MNIST数据集的尺寸统一,只有黑白两种像素,无须再进行额外的预处理,直接拿来建模型就行。

(2)使用自己的数据

而如果是要训练自己的数据,根据模型需要一般要进行以下预处理:

6e2f6ae227bc69c8ef87458689f40005.png

a. 统一格式:即统一基础数据的格式,例如图像数据集,则全部统一为jpg格式;语音数据集,则全部统一为wav格式;文字数据集,则全部统一为UTF-8的纯文本格式等,方便模型的处理;

b. 调整尺寸:根据模型的输入要求,将样本数据全部调整为统一尺寸。例如LeNet模型是32x32,AlexNet是224x224,VGG是224x224等;

c. 灰度化:根据模型需要,有些要求输入灰度图像,有些要求输入RGB彩色图像;

d. 去噪平滑:为提升输入图像的质量,对图像进行去噪平滑处理,可使用中值滤波器、高斯滤波器等进行图像的去噪处理。如果训练数据集的图像质量很好了,则无须作去噪处理;

e. 其它处理:根据模型需要进行直方图均衡化、二值化、腐蚀、膨胀等相关的处理;

f. 样本增强:有一种观点认为神经网络是靠数据喂出来的,如果能够增加训练数据的样本量,提供海量数据进行训练,则能够有效提升算法的质量。常见的样本增强方式有:水平翻转图像、随机裁剪、平移变换,颜色、光照变换等。

4. 划分数据集

在训练模型之前,需要将样本数据划分为训练集、测试集,有些情况下还会划分为训练集、测试集、验证集。

(1)使用MNIST数据

本案例要训练模型的MNIST数据集,已经提供了训练集、测试集,代码如下:

#load data(提取训练集、测试集)

train_xdata = mnist.train.images #训练集样本

validation_xdata = mnist.validation.images #验证集样本

test_xdata = mnist.test.images #测试集样本

#labels(提取标签数据)

train_labels = mnist.train.labels #训练集标签

validation_labels = mnist.validation.labels #验证集标签

test_labels = mnist.test.labels #测试集标签

print(train_xdata.shape,train_labels.shape) #输出训练集样本和标签的大小

(2)使用自己的数据

如果是要划分自己的数据集,可使用scikit-learn工具进行划分,代码如下:

fromsklearn.cross_validationimporttrain_test_split

# 随机选取75%的数据作为训练样本,其余25%的数据作为测试样本

# X_data:数据集

# y_labels:数据集对应的标签X_train,X_test,y_train,y_test=train_test_split(X_data,y_labels,test_size=0.25,random_state=33)

5. 查看数据与可视化样本

#查看数据,例如训练集中第一个样本的内容和标签

print(train_xdata[0]) #是一个包含784个元素且值在[0,1]之间的向量

print(train_labrels[0])

#可视化样本,下面是输出了训练集中前20个样本

fig, ax = plt.subplots(nrows=4,ncols=5,sharex='all',sharey='all')

ax = ax.flatten()

for i in range(20):

。。img = train_xdata[i].reshape(28, 28)

。。ax[i].imshow(img,cmap='Greys')

ax[0].set_xticks([])

ax[0].set_yticks([])

plt.tight_layout()

plt.show()

6. 输出效果

99b068e58bc397dc6538b14b00cd8ed2.png


......................省略省略

094b95dfdbe9a2dd018f7b4b25065b37.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python凯撒密码实现_密码:凯撒密码及其Python实现

python凯撒密码实现Before we start let’s some basic terminology... 在开始之前,让我们先介绍一些基本术语... The art and science to achieve security by encoding messages to make them unreadable are known as Cryptography. That’s what the whole art…

qtextedit 默认文案_QT-纯代码控件-QSplitter(分裂器)

版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/qq_41488943/article/details/96431379使用Qplitter实现页面的三布局分布1.新建一个无ui界面的工程&…

TYVJ P1030 乳草的入侵 Label:跳马问题

背景 USACO OCT09 6TH描述 Farmer John一直努力让他的草地充满鲜美多汁的而又健康的牧草。可惜天不从人愿&#xff0c;他在植物大战人类中败下阵来。邪恶的乳草已经在他的农场的西北部份佔领了一片立足之地。草地像往常一样&#xff0c;被分割成一个高度為Y(1 < y < 100)…

s查找mysql服务_MySQL菜鸟实录(一):MySQL服务安装实战

CentOS 7基本信息系统版本&#xff1a; CentOS 7.3 64bit系统配置&#xff1a; 4vCPUs | 8GB磁盘空间&#xff1a;[rootecs-ce5a-0001 ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/vda1 40G 17G 22G 44% /devtmpfs 3.9G 0 3.9G 0% /devtmpfs 3.9G 0 3.9G 0% /dev…

实验一 线性表的顺序存储与实现_【自考】数据结构中的线性表,期末不挂科指南,第2篇

线性表这篇博客写的是线性表相关的内容&#xff0c;包括如下部分&#xff0c;先看下有木有期待啥是线性表线性表的顺序存储线性表的基本运算在顺序表上的实现线性表的链式存储线性表的基本运算在单链表上的实现循环链表与双向循环链表Over&#xff0c;内容还蛮多的&#xff01;…

TYVJ P1012 火柴棒等式 Label:枚举

背景 NOIP2008年提高组第二题描述 给你n根火柴棍&#xff0c;你可以拼出多少个形如“ABC”的等式&#xff1f;等式中的A、B、C是用火柴棍拼出的整数&#xff08;若该数非零&#xff0c;则最高位不能是0&#xff09;。用火柴棍拼数字0-9的拼法如图所示&#xff1a;注意&#xff…

python怎么开发软件_怎么使用python进行软件开发

一、下载pyinstaller 我使用的版本为PyInstaller-2.1&#xff0c;支持python版本2.3-2.7&#xff0c;点击这里下载。 二、安装pyinstaller 下载完成后&#xff0c;解压即可。我的解压目录为D:\Python27\PyInstaller-2.1\ 三、使用pyinstaller打包.py成.exe应用程序 1.注意使用前…

28、清华大学脑机接口实验组SSVEP数据集:通过视觉触发BCI[飞一般的赶脚!]

前言&#xff1a; 哈喽&#xff0c;最近对清华大学脑机接口的数据进行了尝试&#xff0c;输入到了DL模型中&#xff0c;以下是本人对于清华BCI数据的个人见解。 数据地址&#xff1a; 清华大学脑机接口研究组 (tsinghua.edu.cn) 打开网站可以看到有很多个数据&#xff0c;官…

python Pexpect

http://www.cnblogs.com/dkblog/archive/2013/03/20/2970738.htmlhttp://www.ibm.com/developerworks/cn/linux/l-cn-pexpect2/index.htmlhttp://www.cnblogs.com/dkblog/archive/2013/03/20/2970738.htmlpython Pexpect Pexpect 是一个用来启动子程序并对其进行自动控制的纯 P…

3dmax镜像后模型线条乱了_3dMax入门教程来啦!小白赶紧收藏!

3D Studio Max&#xff0c;常简称为3d Max或3ds MAX&#xff0c;是Discreet公司开发的&#xff08;后被Autodesk公司合并&#xff09;基于PC系统的三维动画渲染和制作软件&#xff0c; 3dmax软件主要功能有建模&#xff0c;动画&#xff0c;渲染&#xff0c;特效等&#xff0c;…

如何将多个一维列表转化为二维列表_数据分析2_如何处理一维、二维数据

吞一块大饼&#xff0c;还不如切成小块吃得香常见的数据集&#xff0c;要么是数列&#xff0c;要么是表格&#xff1b;因此&#xff0c;数据分析最首要的是&#xff0c;处理一维、二维数据。主要知识点可参考如图。如需要&#xff0c;可点击以下百度网盘链接下载数据分析基础知…

关于java中锁的面试题_Java面试题-Java中的锁

1. 如何实现乐观锁(CAS)&#xff1f;如何避免ABA问题&#xff1f;答&#xff1a;1)读取内存值的方式实现了乐观锁(比如&#xff1a;SVN系统)&#xff0c;方法&#xff1a;第一&#xff0c;比较内存值和期望值&#xff1b;第二&#xff0c;替换内存值为要替换值。2)带参数版本来…

NSUserDefaults

2019独角兽企业重金招聘Python工程师标准>>> NSUserDefaults 转载于:https://my.oschina.net/18829297883/blog/737931

什么是算术运算和逻辑运算_8086微处理器的算术和逻辑运算

什么是算术运算和逻辑运算逻辑指令 (Logical Instructions) a) AND: Logical AND a)AND&#xff1a;逻辑AND Atleast one of the operant should be a register or a memory operant both the operant cannot be a memory location or immediate operant. 操作中的至少一个应该…

h5引入json_Vue中如何使用本地Json文件?

我需要将菜单配置成Json文件&#xff0c;然后再程序中引入{{menu.name}}import menuListConfig from ../../config/menu.jsonexport default {name: "Sider",data(){return {menuList:JSON.parse(JSON.stringify(menuListConfig))}}}需要如何做&#xff0c;才能v-for…

python2和python3的默认编码_python2和python3哪个版本新

Python2 还是 Python3 &#xff1f; py2.7是2.x系列的最后一个版本&#xff0c;已经停止开发&#xff0c;不再增加新功能。2020年终止支持。 所有的最新的标准库的更新改进&#xff0c;只会在3.x的版本里出现。Python3.0在2008年就发布出来&#xff0c;而2.7作为2.X的最终版本并…

使用python套用excel模板_Python自动化办公Excel-从表中批量复制粘贴数据到新表

1、模块安装 1&#xff09;cmd模式下&#xff1a; pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xlrd pip install -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl 2&#xff09;如果有安装Pycharm&#xff0c;则在程序中操作如下&#xff1a; 菜单栏&…

在HubSpot是如何应对Fat JAR困境的

在七月底&#xff0c;Spring Boot和Dropwizard分别发布了1.4和1.0版本&#xff0c;它们都是基于Fat JAR的。随着人们更多地采用这些框架和微服务架构&#xff0c;Fat JAR成为了通用的部署机制。\\Fat JAR技术会将Java应用的所有依赖打包到一个bundle之中&#xff0c;便于执行&a…

如何查看本地的崩溃log_过年回家,还怕抢不到票?程序员教你如何抢票

2019年接近尾声&#xff0c;距离春节回家的日子越来越近&#xff0c;26日起&#xff0c;2020年除夕火车票正式开售&#xff0c;抢票大战也进入白热化阶段。是否为某抢票 App 加速而烦恼&#xff0c;是否为车票“秒光而烦恼”。别慌&#xff0c;作为连“对象”都是 new 出来的程…

hashmap转红黑树的阈值为8_面试必考的 HashMap,这篇总结到位了

点击蓝色“JavaKeeper”关注我哟加个“星标”&#xff0c;一起成长&#xff0c;做牛逼闪闪的技术人1 概述HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长.HashMap是非线程安全的,只适用于单线程环…