MNIST(手写数字图片识别+ubyte.gz文件)数据集下载、将MNIST数据集转化为CSV格式,并使用神经网络测试,手写0-9数字识别。

  • 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数字识别。

借鉴博客

1、下载MNIST数据集

2、将MNIST数据集转化为CSV格式

3、从手写数字图像中读取和解码数据

4、创建基本的神经网络,通过使用MNIST训练数据集进行训练,使用MNIST测试集和自己创建的手写数字图像数据对神经网络进行测试。

5、运行结果


  • 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、运行结果

手写数字源文件:

运行结果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章