虽然很多时候一些模块内置的数据集使用起来非常的方便,搭建模型,做实例项目非常快,但是这种形式的数据建模本质上并不通用,我们使用模型大多是要解决现实生活中的很多实际问题,在不同的应用场景和业务问题中都会遇上各式各样的数据集,没有办法像那些使用起来很方便的内置数据集一样直接导入使用,这时候我们就要把问题的处理过程抽象成一个标准的数据流程,抽象出来标准流程的好处就是,之后任何问题我们都可以将其朝着标准流程的形式进行转化,从而讲一个复杂的问题标准化,就像很多时候搭建模型一样,明确需要定义的部分就是输入层的shape,跟这里标准数据流程是一个性质的。
背景闲话就说这些,接下来回到正题,本文主要的内容是将经典的手写数字识别数据集转化为标准的图像进行存储,之后建模的数据加载会选择从本地加载图像数据的形式进行实施,这里主要是为了数据流程的标准化,本质上你不需要转化也可以直接使用mnist数据集,远比加载图像要快得多。
本文是内置mnist数据转化解析存储系列的第三篇文章,前面两篇分别是:
《Python实现将scikit-learn内置的mnist数据集转化为图像进行存储》
《Python实现将tensorflow内置的二进制格式的mnist数据集转化为图像进行存储》
有需要的话可以自行查看。
与Tensorflow和Sklearn一样,Keras也提供了内置的mnist数据集,我们可以很方便地使用一行代码就可以导入:
from keras.datasets import mnist
但是这里主要是基于内置的数据集将其转化为原始图像进行存储,整体的代码实现如下所示:
#!usr/bin/env python
# encoding:utf-8
from __future__ import division
"""
__Author__:沂水寒城
功能: Keras Mnist 数据集处理
"""
import os
import numpy as np
from PIL import Image
from keras.datasets import mnist
def parseMnist2Img(resDir="keras-mnist/"):
"""
转化为图片存储
"""
# 解析训练数据集
train_datas, train_labels = mnist.load_data()[0]
train_datas = train_datas.reshape(-1, 28, 28, 1)
train_datas = train_datas.astype("float32")
trainDir = resDir + "train/"
print("train_datas_nums: ", len(train_datas))
for i in range(len(train_datas)):
one_train_data = train_datas[i]
one_train_data = one_train_data.reshape(28, 28)
print("one_train_data_shape: ", one_train_data.shape)
one_train_img = Image.fromarray(np.uint8(one_train_data))
one_train_label = str(train_labels[i])
print("one_train_label: ", one_train_label)
oneDir = trainDir + one_train_label + "/"
if not os.path.exists(oneDir):
os.makedirs(oneDir)
one_path = (
oneDir + one_train_label + "_" + str(len(os.listdir(oneDir)) + 1) + ".jpg"
)
one_train_img.save(one_path)
# 解析测试数据集
test_datas, test_labels = mnist.load_data()[1]
test_datas = test_datas.reshape(-1, 28, 28, 1)
test_datas = test_datas.astype("float32")
testDir = resDir + "test/"
print("test_datas_nums: ", len(test_datas))
for i in range(len(test_datas)):
one_test_data = test_datas[i]
one_test_data = one_test_data.reshape(28, 28)
print("one_test_data_shape: ", one_test_data.shape)
one_test_img = Image.fromarray(np.uint8(one_test_data))
one_test_label = str(test_labels[i])
print("one_test_label: ", one_test_label)
oneDir = testDir + one_test_label + "/"
if not os.path.exists(oneDir):
os.makedirs(oneDir)
one_path = (
oneDir + one_test_label + "_" + str(len(os.listdir(oneDir)) + 1) + ".jpg"
)
one_test_img.save(one_path)
if __name__ == "__main__":
print(
"=========================================Loading kerasHandle==========================================="
)
parseMnist2Img(resDir="keras-mnist/")
运行会自动创建keras-mnist目录,与递归下级目录trian和test,以test为例,结果截图如下所示:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)