2018-06-30 详解 MNIST 数据集

详解 MNIST 数据集

代码解释见下面

Label File

先是一个32位的整形 表示的是Magic Number,这是用来标示文件格式的用的。一般默认不变,为2049

第二是图片的的数量

接下去就是一次排列图片的标示Label。

-

Image File

也是Magic Number。同上。保持不变2051.

图片的数量

图片的高

图片的宽

图片的像素点[灰度 256位]。

unpack(fmt, string)       按照给定的格式(fmt)解析字节流string,返回解析出来的tuple

> big-endian standard       按原字节数

见上图:图片宽高分别为28,所以有28*28=784个值

代码:

import os

import struct

import numpy as np

def load_mnist(path, kind='train'):

print("in load_mnist")

"""Load MNIST data from `path`"""  #注释

labels_path = os.path.join(path,'%s-labels.idx1-ubyte'%kind) #路径+train-labels-idx1-ubyte(gz文件)

images_path = os.path.join(path,'%s-images.idx3-ubyte'%kind) #路径+train-labels-idx1-ubyte(gz文件)

with open(labels_path, 'rb') as lbpath: #以二进制格式打开文件train-labels-idx1-ubyte用于只读,lbpath代表此文件对象

#从文件中读8个字节,1-4个字节为magic number,4-8个字节为图片数量,magic和n均为无符号整形     

magic, n = struct.unpack('>II',lbpath.read(8)) #>  big-endian 高字节在高位 II两个无符号整形,每个占4个字节

labels = np.fromfile(lbpath,dtype=np.uint8)

print("labels length=%d"%len(labels))

with open(images_path, 'rb') as imgpath:

#从文件中读16个字节,1-4个字节为magic number,4-8个字节为图片数量,rows为图片的高,cols为图片的宽,magic,num,rows,cols均为无符号整形

magic, num, rows, cols = struct.unpack('>IIII',imgpath.read(16))#> big-endian 高字节在高位IIII四个无符号整形,每个占4个字节

#读取图片数据,并转换为 60,000行784列的矩阵,也就是说一行是一张图片

images = np.fromfile(imgpath,dtype=np.uint8).reshape(len(labels), 784)

print("images length=%d"%len(images))

return images, labels

if __name__=='__main__':

images_train,labels_train=load_mnist('', kind='train')  #cd mnist  python load_mnist.py执行当前程序

print("images")

print (images_train)

print("labels")

print (labels_train)

print('Rows: %d, columns: %d' % (images_train.shape[0], images_train.shape[1]))

count = np.zeros(10)

nTrain = len(images_train)

for i in range(nTrain):

label = labels_train[i]

count[label] += 1

filename = './train/' + str(label) + '/' + str(label) + '_' + str(int(count[label])) + '.png'

print(filename)

img = images_train[i].reshape(28,28)

cv2.imwrite(filename, img) #找不到图片?

print(str(int(count[label])))

print("over")

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2152
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3105
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2060
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2526
来自专栏落花落雨不落叶

canvas画简单电路图

61111
来自专栏芋道源码1024

熔断器 Hystrix 源码解析 —— 断路器 HystrixCircuitBreaker

本文主要基于 Hystrix 1.5.X 版本 1. 概述 2. HystrixCircuitBreaker 3. HystrixCircuitBreaker....

5287
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5436
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6768
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2645

扫码关注云+社区