python读取MNIST数据集
来源:互联网 发布:公司网络环境搭建 vpn 编辑:程序博客网 时间:2024/06/07 00:19
在学习ufldl课程时需要用到MNIST数据集,主页在这里。但由于该数据集为IDX文件格式,是一种用来存储向量与多维度矩阵的文件格式,不能直接读取。
mnist的结构如下
TRAINING SET LABEL FILE (train-labels-idx1-ubyte):[offset] [type] [value] [description] 0000 32 bit integer 0x00000801(2049) magic number (MSB first) 0004 32 bit integer 60000 number of items 0008 unsigned byte ?? label 0009 unsigned byte ?? label ........ xxxx unsigned byte ?? labelThe labels values are 0 to 9.TRAINING SET IMAGE FILE (train-images-idx3-ubyte):[offset] [type] [value] [description] 0000 32 bit integer 0x00000803(2051) magic number 0004 32 bit integer 60000 number of images 0008 32 bit integer 28 number of rows 0012 32 bit integer 28 number of columns 0016 unsigned byte ?? pixel 0017 unsigned byte ?? pixel ........ xxxx unsigned byte ?? pixel
Label File
先是一个32位的整形 表示的是Magic Number,这是用来标示文件格式的用的。一般默认不变。2049。第二是图片的的数量。
接下来就是一次排列图片的标示Label
Image File
也是Magic Number。同上。保持不变2051。接下来依次是
图片的数量,图片的高,图片的宽,图片的像素点[灰度 256位]。
因此想要读出数据集的图片矩阵和标签的话,需要先读出Magic Number等数据。代码如下:
# encoding: utf-8"""对MNIST手写数字数据文件转换为bmp图片文件格式。数据集下载地址为http://yann.lecun.com/exdb/mnist。相关格式转换见官网以及代码注释。"""import numpy as npimport structimport matplotlib.pyplot as plt# 训练集文件train_images_idx3_ubyte_file = 'E:/important_dataset/train-images.idx3-ubyte'# 训练集标签文件train_labels_idx1_ubyte_file = 'E:/important_dataset/train-labels.idx1-ubyte'# 测试集文件test_images_idx3_ubyte_file = 'E:/important_dataset/t10k-images.idx3-ubyte'# 测试集标签文件test_labels_idx1_ubyte_file = 'E:/important_dataset/t10k-labels.idx1-ubyte'def decode_idx3_ubyte(idx3_ubyte_file): """ 解析idx3文件的通用函数 :param idx3_ubyte_file: idx3文件路径 :return: 数据集 """ # 读取二进制数据 bin_data = open(idx3_ubyte_file, 'rb').read() # 解析文件头信息,依次为魔数、图片数量、每张图片高、每张图片宽 offset = 0 fmt_header = '>iiii' #'>IIII'是说使用大端法读取4个unsinged int32 magic_number, num_images, num_rows, num_cols = struct.unpack_from(fmt_header, bin_data, offset) print '魔数:%d, 图片数量: %d张, 图片大小: %d*%d' % (magic_number, num_images, num_rows, num_cols) # 解析数据集 image_size = num_rows * num_cols offset += struct.calcsize(fmt_header) print("offset: ",offset) fmt_image = '>' + str(image_size) + 'B' # '>784B'的意思就是用大端法读取784个unsigned byte images = np.empty((num_images, num_rows*num_cols)) for i in range(num_images): if (i + 1) % 10000 == 0: print '已解析 %d' % (i + 1) + '张' images[i] = np.array(struct.unpack_from(fmt_image, bin_data, offset)).reshape((num_rows*num_cols)) offset += struct.calcsize(fmt_image) return images.Tdef decode_idx1_ubyte(idx1_ubyte_file): """ 解析idx1文件的通用函数 :param idx1_ubyte_file: idx1文件路径 :return: 数据集 """ # 读取二进制数据 bin_data = open(idx1_ubyte_file, 'rb').read() # 解析文件头信息,依次为魔数和标签数 offset = 0 fmt_header = '>ii' magic_number, num_images = struct.unpack_from(fmt_header, bin_data, offset) print '魔数:%d, 图片数量: %d张' % (magic_number, num_images) # 解析数据集 offset += struct.calcsize(fmt_header) fmt_image = '>B' labels = np.empty(num_images) for i in range(num_images): if (i + 1) % 10000 == 0: print '已解析 %d' % (i + 1) + '张' labels[i] = struct.unpack_from(fmt_image, bin_data, offset)[0] offset += struct.calcsize(fmt_image) return labelsdef load_train_images(idx_ubyte_file=train_images_idx3_ubyte_file): """ TRAINING SET IMAGE FILE (train-images-idx3-ubyte): [offset] [type] [value] [description] 0000 32 bit integer 0x00000803(2051) magic number 0004 32 bit integer 60000 number of images 0008 32 bit integer 28 number of rows 0012 32 bit integer 28 number of columns 0016 unsigned byte ?? pixel 0017 unsigned byte ?? pixel ........ xxxx unsigned byte ?? pixel Pixels are organized row-wise. Pixel values are 0 to 255. 0 means background (white), 255 means foreground (black). :param idx_ubyte_file: idx文件路径 :return: n*row*col维np.array对象,n为图片数量 """ return decode_idx3_ubyte(idx_ubyte_file)def load_train_labels(idx_ubyte_file=train_labels_idx1_ubyte_file): """ TRAINING SET LABEL FILE (train-labels-idx1-ubyte): [offset] [type] [value] [description] 0000 32 bit integer 0x00000801(2049) magic number (MSB first) 0004 32 bit integer 60000 number of items 0008 unsigned byte ?? label 0009 unsigned byte ?? label ........ xxxx unsigned byte ?? label The labels values are 0 to 9. :param idx_ubyte_file: idx文件路径 :return: n*1维np.array对象,n为图片数量 """ return decode_idx1_ubyte(idx_ubyte_file)def load_test_images(idx_ubyte_file=test_images_idx3_ubyte_file): """ TEST SET IMAGE FILE (t10k-images-idx3-ubyte): [offset] [type] [value] [description] 0000 32 bit integer 0x00000803(2051) magic number 0004 32 bit integer 10000 number of images 0008 32 bit integer 28 number of rows 0012 32 bit integer 28 number of columns 0016 unsigned byte ?? pixel 0017 unsigned byte ?? pixel ........ xxxx unsigned byte ?? pixel Pixels are organized row-wise. Pixel values are 0 to 255. 0 means background (white), 255 means foreground (black). :param idx_ubyte_file: idx文件路径 :return: n*row*col维np.array对象,n为图片数量 """ return decode_idx3_ubyte(idx_ubyte_file)def load_test_labels(idx_ubyte_file=test_labels_idx1_ubyte_file): """ TEST SET LABEL FILE (t10k-labels-idx1-ubyte): [offset] [type] [value] [description] 0000 32 bit integer 0x00000801(2049) magic number (MSB first) 0004 32 bit integer 10000 number of items 0008 unsigned byte ?? label 0009 unsigned byte ?? label ........ xxxx unsigned byte ?? label The labels values are 0 to 9. :param idx_ubyte_file: idx文件路径 :return: n*1维np.array对象,n为图片数量 """ return decode_idx1_ubyte(idx_ubyte_file)def run(): train_images = load_train_images() #(num_rows*num_cols,num_images) train_labels = load_train_labels() # test_images = load_test_images() # test_labels = load_test_labels() # 查看前十个数据及其标签以读取是否正确 for i in range(10): print train_labels[i] #plt.imshow(train_images[i], cmap='gray') #plt.show() print 'done'if __name__ == '__main__': run()
阅读全文
0 0
- 读取 mnist 数据集 --- python
- python读取MNIST数据集
- python读取MNIST image数据
- python读取MNIST image数据
- C++读取MNIST数据集
- Python解析MNIST数据集
- python读取mnist
- Python读取MNIST文件
- python读取MNIST
- 文章标题:Mnist数据集的读取
- MNIST数据读取分析
- 《MNIST学习》读取数据
- MNIST数据读取
- 【机器学习】MNIST数据集上的python读取和使用操作
- 使用python读取tensorflow实例中的MNIST模拟数据
- mnist数据集转成图片 Python 实现
- Python解析lmdb格式mnist数据集
- 识别MNIST数据集之(一):读取数据
- Android 打造一个秒开的 Android App
- JVM如何GC,新生代,老年代,持久代,都存储哪些东西
- 题目458-小光棍数
- 操作系统实验六实验报告
- Spring之在学习(4)
- python读取MNIST数据集
- Spring Boot——2分钟构建spring web mvc REST风格HelloWorld
- Hibernate+struts代码优化(五)
- [UVa232]Crossword Answers用两个数组解决问题
- HDU 6097 Mindis(反演)
- Winform开发中耗时操作封装用异步执行(.net 4.0)
- 欢迎使用CSDN-markdown编辑器
- java面试
- 用canvas画能走的钟