1.简介

MNIST 数据集来自美国国家标准与技术研究所, 是NIST(National Institute of Standards and Technology)的缩小版,训练集 (training set) 由来自 250 个不同人手写的数字构成, 其中 50% 是高中学生, 50% 来自人口普查局 (the Census Bureau) 的工作人员,测试集(test set) 也是同样比例的手写数字数据.

MNIST 数据集可在 http://yann.lecun.com/exdb/mnist/ 获取, 图片是以字节的形式进行存储,它包含了四个部分:

  • Training set images: train-images-idx3-ubyte.gz (9.9 MB, 解压后 47 MB, 包含 60,000 个样本)
  • Training set labels: train-labels-idx1-ubyte.gz (29 KB, 解压后 60 KB, 包含 60,000 个标签)
  • Test set images: t10k-images-idx3-ubyte.gz (1.6 MB, 解压后 7.8 MB, 包含 10,000 个样本)
  • Test set labels: t10k-labels-idx1-ubyte.gz (5KB, 解压后 10 KB, 包含 10,000 个标签)

此数据集中,训练样本:共60000个,其中55000个用于训练,另外5000个用于验证。测试样本:共10000个,验证数据比例相同。

数据集中像素值
a)使用python读取二进制文件方法读取mnist数据集,则读进来的图像像素值为0-255之间;标签是0-9的数值。
b)采用TensorFlow的封装的函数读取mnist,则读进来的图像像素值为0-1之间;标签是0-1值组成的大小为1*10的行向量。

2.读取mnist到numpy

load_mnist 函数返回两个数组, 第一个是一个 n x m 维的 NumPy array(images), 这里的 n 是样本数(行数), m 是特征数(列数). 训练数据集包含 60,000 个样本, 测试数据集包含 10,000 样本.

在 MNIST 数据集中的每张图片由 28 x 28 个像素点构成, 每个像素点用一个灰度值表示. 在这里, 我们将 28 x 28 的像素展开为一个一维的行向量, 这些行向量就是图片数组里的行(每行 784 个值, 或者说每行就是代表了一张图片).

load_mnist 函数返回的第二个数组(labels) 包含了相应的目标变量, 也就是手写数字的类标签(整数 0-9).

import os
import struct
import numpy as npdef load_mnist(path, kind='train'):"""Load MNIST data from `path`"""labels_path = os.path.join(path,'%s-labels-idx1-ubyte'% kind)images_path = os.path.join(path,'%s-images-idx3-ubyte'% kind)with open(labels_path, 'rb') as lbpath:magic, n = struct.unpack('>II',lbpath.read(8))labels = np.fromfile(lbpath,dtype=np.uint8)#读入magic是一个文件协议的描述,也是调用fromfile 方法将字节读入NumPy的array之前在文件缓冲中的item数(n). with open(images_path, 'rb') as imgpath:magic, num, rows, cols = struct.unpack('>IIII',imgpath.read(16))images = np.fromfile(imgpath,dtype=np.uint8).reshape(len(labels), 784)return images, labels
1.
>这是指大端(用来定义字节是如何存储的,关于大小端, 更多内容可见<<深入理解计算机系统 – 2.1 节信息存储>>)
2.
I: 这是指一个无符号整数.

3.查看tensorflow集成的mnist

from tensorflow.examples.tutorials.mnist import input_dataminit = input_data.read_data_sets("../MNIST_data")
#如果该路径没有会自动下载print("Training data size",minit.train.num_examples)
#训练数据print("Training data size",minit.validatation.num_examples)
#验证数据print("Training data size",minit.test.num_examples)
#测试数据print("Example training data size",minit.train.image[0])
#样例训练数据print(“Example training data label”,minist.train.labels[0])
#样例训练数据标签 batch_size = 100
x,y = mnist.train.next_batch(batch_size)
print('x shape:',x.shape)
print('y shape:',y.shape)

4.可视化

4.1 plt的方法

从 feature matrix 中将 784-像素值 的向量 reshape 为之前的 28*28 的形状, 然后通过 matplotlib 的 imshow 函数进行绘制,不能进行one-hot编码:

  • 读单个图片
import matplotlib.pyplot as plt#from tensorflow.contrib.learn.python.learn.datasets.mnist import read_data_sets
#mnist = read_data_sets('MNIST_data', one_hot=False)from tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets("./MNIST_data",one_hot=False)
x, y = mnist.test.next_batch(1)
x = x.reshape([28, 28])fig = plt.figure()
# Method1
ax1 = fig.add_subplot(221)
ax1.imshow(x, cmap=plt.cm.gray)# Method2: 反转色
ax2 = fig.add_subplot(222)
ax2.imshow(x, cmap=plt.cm.gray_r) # r表示reverse# Method3(等价于Method1)
ax3 = fig.add_subplot(223)
ax3.imshow(x, cmap='gray')# Method4(等价于Method2)
ax4 = fig.add_subplot(224)
ax4.imshow(x, cmap='gray_r')plt.show()
  • 读多个图片
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets("./MNIST_data",one_hot=False)fig, ax_big = plt.subplots()for i in range(100): #读一百张x,y = mnist.test.next_batch(1)x = x.reshape([28,28])ax = fig.add_subplot(10,10,i+1) #10行10列ax.imshow(x, cmap=plt.cm.gray)ax.set_xticks([])              ax.set_yticks([])#隐藏子图坐标轴刻度ax_big.set_xticks([])
# 隐藏坐标轴刻度
ax_big.set_yticks([])plt.show()
#plt.savefig("路径.png", dpi=150)

4.2 torchvision&scipy方法

其实数据集里的图片就是一个带有像素值的二维数组,可以画出这个数组的库有很多。机器学习库torch,的torchvision也可以。具体方法如下:

import torchvision
import torch.utils.data as Data
import scipy.misc
import osDOWNLOAD_MNIST = True train_data = torchvision.datasets.MNIST(root='./MNIST_data2/',train=True,transform=torchvision.transforms.ToTensor(),download=DOWNLOAD_MNIST)#把原始图片保存至MNIST_data/raw/下
save_dir="mnist/raw/"
if os.path.exists(save_dir) is False:os.makedirs(save_dir)for i in range(20):image_array,_=train_data[i]#打印第i个image_array=image_array.resize(28,28)filename=save_dir + 'mnist_train_%d.jpg' % i#保存文件的格式print(filename)print(train_data.train_labels[i])#打印出标签scipy.misc.toimage(image_array,cmin=0.0,cmax=1.0).save(filename)#保存图像

结果输出如下:

1.MNIST(简介可视化)相关推荐

  1. MNIST数据可视化

    代码 import numpy as np import struct from scipy.misc import imsave from PIL import Image''' mnist数据格式 ...

  2. cifar10和cifar100(简介可视化)

    cifar CIFAR数据集是 Visual Dictionary (Teaching computers to recognize objects) 的子集,由三个教授收集,主要来自google和各 ...

  3. CVPR2021 | 视觉 Transformer 的可视化

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 报道丨极市平台 近两年,"Transformer" ...

  4. 基于tensorflow的MNIST手写字识别

    一.卷积神经网络模型知识要点卷积卷积 1.卷积 2.池化 3.全连接 4.梯度下降法 5.softmax 本次就是用最简单的方法给大家讲解这些概念,因为具体的各种论文网上都有,连推导都有,所以本文主要 ...

  5. 【AI白身境】深度学习中的数据可视化​​​​​​​

    文章首发于微信公众号<有三AI> [AI白身境]深度学习中的数据可视化 今天是新专栏<AI白身境>的第八篇,所谓白身,就是什么都不会,还没有进入角色. 上一节我们已经讲述了如何 ...

  6. 【AI白身境】深度学习中的数据可视化

    今天是新专栏<AI白身境>的第八篇,所谓白身,就是什么都不会,还没有进入角色. 上一节我们已经讲述了如何用爬虫爬取数据,那爬取完数据之后就应该是进行处理了,一个很常用的手段是数据可视化. ...

  7. 对pca降维后的手写体数字图片数据分类_【AI白身境】深度学习中的数据可视化...

    今天是新专栏<AI白身境>的第八篇,所谓白身,就是什么都不会,还没有进入角色. 上一节我们已经讲述了如何用爬虫爬取数据,那爬取完数据之后就应该是进行处理了,一个很常用的手段是数据可视化. ...

  8. 丽水数据可视化设计价格_B端产品设计数据可视化图表选择篇

    本文一共6040文字,阅读大概需要15分钟 近期在做直播后台内容数字化渠道升级 ,其中有个工作是需要把大量的数据表格转换成为可视化图表,接到需求一脸懵的我,冒出几个问题 1.什么是数据可视化? 2.数 ...

  9. 知识图谱可视化技术在美团的实践与探索

    省时查报告-专业.及时.全面的行研报告库 省时查方案-专业.及时.全面的营销策划方案库 [免费下载]2022年3月份热门报告盘点 某短视频APP推荐算法及策略最详细拆解 大萧条来临前的几大征兆 机器学 ...

最新文章

  1. Oracle逻辑结构学习笔记
  2. 当系统扩展遇到违背OO的里氏原则(LSP)的时候怎么办 ?
  3. 2.11 while循环的嵌套以及应用(难)
  4. magento问题集
  5. linux 装完yum不能用,解决yum不能正常使用的问题
  6. 关于被忽略的转置矩阵的公式
  7. 高通“扶”大唐 狙击低端芯片玩家
  8. seo查询系统php源码,2020版SEO计费系统的源码
  9. Subclipse与Subversive比较
  10. 技嘉linux支持的主板型号,详细解读主板厂商命名规则——技嘉篇
  11. 47 jquery 计时器 选择器 筛选器 左边菜单栏
  12. 2022年湖南省初级审计师考试模拟题及答案
  13. snipaste如何滚动截图_3款工具满足你对截图软件的所有想象
  14. 检测不到声卡High Definition Audio控制器显示代码10?驱动人生教你如何解决问题
  15. javaweb笔记(方立勋)
  16. 生成式模型(VAE+GAN)
  17. Android 使用FFmpeg3.3.9基于命令实现视频压缩
  18. 杭州海赢科技分享速卖通绑定欧盟责任人流程及相关FAQ
  19. 图像矫正:桶形畸变矫正的原理及python简易实现与加速
  20. Abaqus中C3D8R单元和C3D8I单元的区别

热门文章

  1. 腾讯QQ每分钟在线人数的计算方法
  2. linux日志审计audit
  3. WriteableBitmapEx
  4. 什么是语音直播源码,语音下直播系统可以做什么?
  5. Arcgis制图之浮雕效果
  6. java使用Graphics2D进行图片文字合成示例
  7. C语言 | 联合体详解
  8. 大众点评抓取文字解密-2021.02
  9. 【HDU4276】The Ghost Blows Light
  10. PHP第一季视频教程.李炎恢.学习笔记(一)(第1章 PHP概述(1)、(2)、(3))