前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >和MNSIT打个招呼

和MNSIT打个招呼

原创
作者头像
代号404
发布2018-08-02 22:53:55
4300
发布2018-08-02 22:53:55
举报
文章被收录于专栏:Deep Learning 笔记Deep Learning 笔记

作为深度学习的入门数据集,MNIST是个很好的选择,我们可以在官网 http://yann.lecun.com/exdb/mnist/下载。

该数据集包含4个文件,分别为:

  • 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 个标签)

mnist的结构如下:


在E盘下新建文件夹,重命名为MNIST,将文件解压后拷贝到该文件夹中,运行以下代码

源码:

代码语言:javascript
复制
import numpy as np

import struct
#  解析IDX文件格式的MNIST数据集,需要用struct模块对二进制文件进行读取操作
#  struct模块中最重要的三个函数是pack() , unpack() 和calcsize()
#  calculate 英 [ˈkælkjuleɪt]  vt.计算  

#  按照给定的格式(fmt)解析字节流string,返回解析出来的tuple
#  tuple = unpack(fmt, string)
#  format  英 [ˈfɔ:mæt] 格式;使格式化 (format在代码中简化为fmt)
#  tuple 英 [tʌpl] 美 [tʌpl]   n.元组,数组

#  按照给定的格式化字符串,把数据封装成字符串(实际上是类似于c结构体的字节流)
#  string = struct.pack(fmt, v1, v2, ...)

#  计算给定的格式(fmt)占用多少字节的内存
#  offset = calcsize(fmt)

import matplotlib.pyplot as plt
#  matplotlib.pyplot是一个命令型函数集合,功能齐全的绘图模块

#------------------------------------ 1 ------------------------------------------

def images_load(filename):
    #   def image_load(filename)用于读取图片数据
    #   file_name表示要访问的文件名 
    
    with open(filename, 'rb') as contents:
    #rb表示该文件以只读方式打开,使用with open()as 的好处在于:读取文件内容后会
    #自动关闭文件,无需手动关闭。
    
        data_buffers = contents.read()
    #   从一个打开的文件读取数据 
    #   buffer   英 [ˈbʌfə(r)]  
    #   n. 缓冲器; 起缓冲作用的人或物; [化] 缓冲液,缓冲剂; [计] 缓冲区
    #   vt. 缓冲       (个人感觉,了解单词的意思,代码会变的亲切一些)      
   
        magic,num,rows,cols = struct.unpack_from('>IIII',data_buffers, 0)
    #   读取图片文件前4个整型数字  
    
        bits = num * rows * cols
    #  整个images数据大小为60000*28*28        
    
        images = struct.unpack_from('>' + str(bits) + 'B', data_buffers, struct.calcsize('>IIII'))
    #   读取images数据
    
        images = np.reshape(images, [num, rows * cols])
    #   转换为[60000,784]型数组
    
    return images
#--------------------------------------- 2 --------------------------------------

def labels_load(filename):
    
    contants = open(filename, 'rb')
    #这里用open()打开文件,读取结束后要用close()关闭    
    
    data_buffers = contants.read()
    
    magic,num = struct.unpack_from('>II', data_buffers, 0) 
    #   读取label文件前2个整形数字,label的长度为num
    #   magic翻译成“魔数”,用于校验下载的文件是否属于MNIST数据集
   
    labels = struct.unpack_from('>' + str(num) + "B", data_buffers, struct.calcsize('>II'))
    #  读取labels数据
        
    contants.close()
    #  关闭文件    
    
    labels = np.reshape(labels, [num])
    #  转换为一维数组
    
    return labels   
#---------------------------------------- 3 ----------------------------------------
#读取训练和测试文件

filename_train_images = 'E:\\MNIST\\train-images.idx3-ubyte'
filename_train_labels = 'E:\\MNIST\\train-labels.idx1-ubyte'
filename_test_images = 'E:\\MNIST\\t10k-images.idx3-ubyte'
filename_test_labels = 'E:\\MNIST\\t10k-labels.idx1-ubyte'
train_images=images_load(filename_train_images)
train_labels=labels_load(filename_train_labels)
test_images=images_load(filename_test_images)
test_labels=labels_load(filename_test_labels)

#----------------------------------------- 4 ------------------------------------------
fig=plt.figure(figsize=(10,10))
#  创建画布,可以改变一下括号内的数字,试试效果

fig.subplots_adjust(left=0,right=1,bottom=0,top=1,hspace=0.05,wspace=0.05)
#  尺寸和间距

for i in range(12):
    images = np.reshape(train_images[i], [28,28])      
    ax=fig.add_subplot(3,4,i+1,xticks=[],yticks=[])
    #取得前12张图像,并将每一张图片转换为28X28数组,然后让这些图片显示为3行4列
    
    ax.imshow(images,cmap=plt.cm.binary,interpolation='nearest')
    ax.text(0,7,str(train_labels[i]))
plt.show()
#  显示图像

print('GOOD WORK')
#  点个赞

运行结果:

代码语言:javascript
复制
GOOD WORK

参考资料:

读取mnist数据集:https://blog.csdn.net/u013597931/article/details/80099243

matplotlib.pyplot详解:https://www.jb51.net/article/125682.htm

struct模块对字节流/二进制流的操作教程:https://www.jb51.net/article/103820.htm

Python numpy函数:reshape():https://blog.csdn.net/qq_28618765/article/details/78083895

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 源码:
  • 运行结果:
  • 参考资料:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档