-
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、運行結果
手寫數字源文件:
運行結果: