使用Tensorflow操作MNIST數據


MNIST是一個非常有名的手寫體數字識別數據集,在很多資料中,這個數據集都會被用作深度學習的入門樣例。而TensorFlow的封裝讓使用MNIST數據集變得更加方便。MNIST數據集是NIST數據集的一個子集,它包含了60000張圖片作為訓練數據,10000張圖片作為測試數據。在MNIST數據集中的每一張圖片都代表了0~9中的一個數字。圖片的大小都為28*28,且數字都會出現在圖片的正中間,如下圖所示:

在上圖中右側顯示了一張數字1的圖片,而右側顯示了這個圖片所對應的像素矩陣,MNIST數據集提供了4個下載文件,具體參考①,在tensorflow中可將這四個文件直接下載放於一個目錄中並加載,如下代碼input_data.read_data_sets所示,如果指定目錄中沒有數據,那么tensorflow會自動去網絡上進行下載。下面代碼介紹了如何使用tensorflow操作MNIST數據集。

from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf

mnist = input_data.read_data_sets('/home/workspace/python/tf/data/mnist',one_hot=True)
# 打印“Training data size: 55000”
print "Training data size: ",mnist.train.num_examples
# 打印“Validating data size: 5000”
print "Validating data size: ",mnist.validation.num_examples
# 打印“Testing data size: 10000”
print "Testing data size: ",mnist.test.num_examples
# 打印“Example training data: [0. 0. 0. ... 0.380 0.376 ... 0.]”
print "Example training data: ",mnist.train.images[0]
# 打印“Example training data label: [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]”
print "Example training data label: ",mnist.train.labels[0]

batch_size = 100
# 從train的集合中選取batch_size個訓練數據
xs, ys = mnist.train.next_batch(batch_size)
# 輸出“X shape:(100,784)”
print "X shape: ", xs.shape
# 輸出"Y shape:(100,10)"
print "Y shape: ", ys.shape

從上面的代碼中可以看出,通過input_data.read_data_sets函數生成的類會自動將MNIST數據集划分為train, validation和test三個數據集,其中train這個集合內含有55000張圖片,validation集合內含有5000張圖片,這兩個集合組成了MNIST本身提供的訓練數據集。test集合內有10000張圖片,這些圖片都來自與MNIST提供的測試數據集。處理后的每一張圖片是一個長度為784的一維數組,這個數組中的元素對應了圖片像素矩陣中的每一個數字(28*28=784)。因為神經網絡的輸入是一個特征向量,所以在此把一張二維圖像的像素矩陣放到一個一維數組中可以方便tensorflow將圖片的像素矩陣提供給神經網絡的輸入層。像素矩陣中元素的取值范圍為[0, 1],它代表了顏色的深淺。其中0表示白色背景,1表示黑色前景。為了方便使用隨機梯度下降,input_data.read_data_sets函數生成的類還提供了mnist.train.next_batch函數,它可以從所有的訓練數據中讀取一小部分作為一個訓練batch。

                        mnist.train.xs訓練集特征

                     mnist.train.ys訓練集分類標簽

軟件版本


TensorFlow 1.0.1  +  Python 2.7.12

參考


①、Yann LeCun教授網站中對MNIST數據集的詳細介紹及數據下載。

②、tensorflow官網對MNIST數據集的介紹及部分操作。

③、《TensorFlow實戰Google深度學習框架》第五章。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM