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、運行結果

手寫數字源文件:

運行結果:

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