作为深度学习的入门数据集,MNIST是个很好的选择,我们可以在官网 http://yann.lecun.com/exdb/mnist/下载。
该数据集包含4个文件,分别为:
mnist的结构如下:
在E盘下新建文件夹,重命名为MNIST,将文件解压后拷贝到该文件夹中,运行以下代码
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')
# 点个赞
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 删除。