问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用python解析mnist

发布网友 发布时间:2022-04-21 09:55

我来回答

2个回答

懂视网 时间:2022-05-10 22:22

这篇文章主要介绍了python读取二进制mnist实例详解的相关资料,需要的朋友可以参考下

python读取二进制mnist实例详解

training data 数据结构:

<br>[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

将整个文件读入:

filename = 'train-images.idx3-ubyte'
binfile = open(filename , 'rb')
buf = binfile.read()

读取头四个32bit的interger:

index = 0
magic, numImages , numRows , numColumns = struct.unpack_from('>IIII' , buf , index)
index += struct.calcsize('>IIII')

读取一个图片,784=28*28 :

im = struct.unpack_from('>784B' ,buf, index)
index += struct.calcsize('>784B')
 
im = np.array(im)
im = im.reshape(28,28)
 
fig = plt.figure()
plotwindow = fig.add_subplot(111)
plt.imshow(im , cmap='gray')
plt.show()

热心网友 时间:2022-05-10 19:30

1.我们首先看一下mnist的数据结构:

2.
可以看出在train-images.idx3-ubyte中,第一个数为32位的整数(魔数,图片类型的数),第二个数为32位的整数(图片的个数),第三和第四个也是32为的整数(分别代表图片的行数和列数),接下来的都是一个字节的无符号数(即像素,值域为0~255),因此,我们只需要依次获取魔数和图片的个数,然后获取图片的长和宽,最后逐个像素读取就可以了。

3.如何使用Python解析数据呢? 首先需要安装python的图形处理库PIL,这个库支持像素级别的图像处理,对于学习数字图像处理有很大的帮助。安装完成之后,就可以进行图像的解析了。看一下代码:

4.首先打开文件,然后分别读取魔数,图片个数,以及行数和列数,在struct中,可以看到,使用了’>IIII’,这是什么意思呢?意思就是使用大端规则,读取四个整形数(Integer),如果要读取一个字节,则可以用’>B’(当然,这里用没用大端规则都是一样的,因此只有两个或两个以上的字节才有用)。

5.什么是大端规则呢?不懂的可以百度一下,这个不再赘述(http://ke.baidu.com/link?url=Bgg8b0vRr3b_SeGyOl8U4DmAbIQT9swGuNtD_21ctEI_NliqsQ-mKF73YT90EILF2EQy50mEua_M4z6Cma3rmK)

6.然后对于每张图片,先创建一张空白的图片,其中的’L’代表这张图片是灰度图,最后逐个像素读取,然后写进空白图片里,最后保存图片,就可以了

7.再来看一下mnist标签的数据结构:

可以发现,与上面的非常相似,只不过这里每一个字节变成了标签而已(标签大小为0~9)

8.好了,通过上述讲解,最后我们可以通过python将mnist解析出来了,看一下效果:

程序源代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PIL import Image
import struct

def read_image(filename):
f = open(filename, 'rb')

index = 0
buf = f.read()

f.close()

magic, images, rows, columns = struct.unpack_from('>IIII' , buf , index)
index += struct.calcsize('>IIII')

for i in xrange(images):
#for i in xrange(2000):
image = Image.new('L', (columns, rows))

for x in xrange(rows):
for y in xrange(columns):
image.putpixel((y, x), int(struct.unpack_from('>B', buf, index)[0]))
index += struct.calcsize('>B')

print 'save ' + str(i) + 'image'
image.save('test/' + str(i) + '.png')

def read_label(filename, saveFilename):
f = open(filename, 'rb')
index = 0
buf = f.read()

f.close()

magic, labels = struct.unpack_from('>II' , buf , index)
index += struct.calcsize('>II')

labelArr = [0] * labels
#labelArr = [0] * 2000

for x in xrange(labels):
#for x in xrange(2000):
labelArr[x] = int(struct.unpack_from('>B', buf, index)[0])
index += struct.calcsize('>B')

save = open(saveFilename, 'w')

save.write(','.join(map(lambda x: str(x), labelArr)))
save.write('\n')

save.close()
print 'save labels success'

if __name__ == '__main__':
read_image('t10k-images.idx3-ubyte')
read_label('t10k-labels.idx1-ubyte', 'test/label.txt')
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 win10下caffe中运行mnist数据集出现问题 OPPOr11pius手机屏已经调到了最亮,但是还是有些黑暗咋整? 怎么通俗地理解张量 ubuntu怎样安装mnist 手机屏幕在室外根本看不见怎么办? 怎样用python构建一个卷积神经网络模型 为什么cc9和华为在阳光下看不清屏幕? python&nbsp;下怎么加载mnist 为什么opporeno手机白天看电影屏幕暗的看不见? 能不能简单举个例子说明一下深度置信网络的(DBN)的分类过程?主要针对文本分类, 在室外总看不清楚手机屏幕,怎么办? matlab的神经网络例程中这段的意义是什么? oppo手机白天外面屏幕看不清还多缩 请大神帮帮忙,python神经网络代码运行出错,程序找不到训练集,请问如何让程序找到MNIST训练集的位置? matlab中loadmnistlabels命令是什么意思 华为手机白天阳光下看不清 oppo手机白天外面屏幕看不清 问一题:为啥野外实习时,植物学老师要走在前面? 给我讲出十种鸟名. 怎么区分植物的种、属、科、目、纲、门、界? 眼睛白天室外看不清手机屏莫 如何加载 mnist data datax字段名不一样 手机亮度调最大了,但屏幕还是很暗怎么办?? tensorflow官方mnist例子怎么运行 手机上的CAD图形白天在室外看不清怎么办 卷积神经网络训练mnist时间多久 手机在室外,尤其有太阳时屏幕就看不清了呢? 哪里有下载MNIST database并介绍如何使用MNIST 为什么手机频幕白天看不见? 用cnn时必须用mnist.uint8数据库吗 手机屏幕白天在外边什么也看不清怎么回事? 除了mnist,手写字体数据库有哪些 python问题 &#92;readmnist.py 19 IndexError: string index out of range 如何使用caffe训练MNIST后得到的lenet 为什么手机上下载的字体不可以用?? iphone 11怎么换字体 苹果11怎么设置字体样式 下载字体安装了为什么不能用? 为什么手机字体美化大师的字体不能再qq里用来