1. 数据集介绍
MNIST手写数字数据集:
http://yann.lecun.com/exdb/mnist/
MNIST 数据集一共有 7 万张图片,其中 6 万张是训练集, 1 万张是测试集。每张图片是 28× 28 的 0−9 的手写数字图片组成。每个图片是黑底白字的形式,黑底用 0 表示,白字用 0-1 之间的浮点数表示,越接近 1 ,颜色越白。
2. 数据处理
下载后解压,会生成一系列的idx1-ubyte文件,需要先进行解析转换。
训练集解析代码:
import numpy as np
import struct
from PIL import Image
import os
# 定义MNIST数据文件的路径
data_file = r'MNIST_data/train-images.idx3-ubyte'
# 定义MNIST标签文件的路径
label_file = r'MNIST_data/train-labels.idx1-ubyte'
# 定义存储图像数据的根目录
datas_root = 'data/train'
# 设置数据文件的大小为47040016字节,但实际读取时应去掉16字节的头部信息
data_file_size = 47040016
data_file_size = str(data_file_size - 16) + 'B'
# 读取数据文件的全部内容
data_buf = open(data_file, 'rb').read()
# 解析数据文件头部的magic number, 图像数量, 图像行数和列数
magic, numImages, numRows, numColumns = struct.unpack_from('>IIII', data_buf, 0)
# 解析数据文件中所有图像的数据,去掉头部信息后为47040000字节
datas = struct.unpack_from('>' + da