-
MNIST(手写数字图片识别+ubyte.gz文件)数据集下载、将数据集转化为CSV格式,并使用神经网络测试,手写0-9数字识别。
-
借鉴博客
https://blog.csdn.net/Albert201605/article/details/79893585
https://blog.csdn.net/epubit17/article/details/80009618
https://www.sohu.com/a/228825316_99960938
目录
MNIST(手写数字图片识别+ubyte.gz文件)数据集下载、将数据集转化为CSV格式,并使用神经网络测试,手写0-9数字识别。
4、创建基本的神经网络,通过使用MNIST训练数据集进行训练,使用MNIST测试集和自己创建的手写数字图像数据对神经网络进行测试。
-
1、下载MNIST数据集
下载链接:http://yann.lecun.com/exdb/mnist/
-
2、将MNIST数据集转化为CSV格式
转化方法:下载原始数据后,置于工程目录下,解压,运行以下代码即可。
def convert(imgf, labelf, outf, n):
f = open(imgf, "rb")
o = open(outf, "w")
l = open(labelf, "rb")
f.read(16)
l.read(8)
images = []
for i in range(n):
image = [ord(l.read(1))]
for j in range(28 * 28):
image.append(ord(f.read(1)))
images.append(image)
for image in images:
o.write(",".join(str(pix) for pix in image) + "\n")
f.close()
o.close()
l.close()
convert("MNIST_data/train-images.idx3-ubyte", "MNIST_data/train-labels.idx1-ubyte",
"mnist_train.csv", 60000)
convert("MNIST_data/t10k-images.idx3-ubyte", "MNIST_data/t10k-labels.idx1-ubyte",
"mnist_test.csv", 10000)
print("Convert Finished!")
转化结果:
-
3、从手写数字图像中读取和解码数据
可以通过图像编辑或者绘画软件来创建图片,也可以通过用笔在纸上手写数字,通过拍照将手写数字变成图片格式。(在创建手写PNG图片时,需要将它们调整到28个像素乘以28个像素,这样才可以匹配MNIST数据集的图片)。
import imageio
import glob
import numpy
import matplotlib.pyplot
our_own_dataset = []
for image_file_name in glob.glob('Number4.png'):
print ("加载文件:", image_file_name)
# 使用文件名设置正确的标签
label = int(image_file_name[-5:-4])
# 将png文件图像转为数组
img_array = imageio.imread(image_file_name, as_gray=True)
# 每张图片都由一个28 ×28 的矩阵表示,每张图片都由一个784 维的向量表示(28*28=784)
# 将数组的值减去了255.0。常规而言,0指的是黑色,255指的是白色,但是,MNIST数据集使用相反的方式表示,因此将值逆转过来以匹配MNIST数据
# 从28x28重塑到包含784个值的列表,反转值
img_data = 255.0 - img_array.reshape(784)
# 然后将数据缩放到范围从0.01到1.0
img_data = (img_data / 255.0 * 0.99) + 0.01
print(numpy.min(img_data))
print(numpy.max(img_data))
# 附加标签和图像数据来测试数据集
record = numpy.append(label,img_data)
print(record)
our_own_dataset.append(record)
pass
matplotlib.pyplot.imshow(our_own_dataset[0][1:].reshape(28,28), cmap='Greys', interpolation='None')
print(our_own_dataset[0])
print("识别结果为:", record[0])
print(record[0])
手写数字原图:
提醒:我们要创建较小的PNG图片,将它们调整到28个像素乘以28个像素,这才可以匹配曾经用过的来自MNIST数据集的图片。可以使用Win10自带的图像编辑器做到这一点。在导入图像是确保该图像为28个像素乘以28个像素,否则会报错。
读取解析结果:
-
4、创建基本的神经网络,通过使用MNIST训练数据集进行训练,使用MNIST测试集和自己创建的手写数字图像数据对神经网络进行测试。
该步骤即为创建基本的神经网络,使用MNIST训练数据集进行训练,使用MNIST测试集和自己创建的手写数字图像数据对神经网络进行测试。
具体实现过程可参考:https://download.csdn.net/download/qq_40513088/12524193
-
5、运行结果
手写数字源文件:
运行结果: