一、MNIST數據集介紹
MNIST數據集是深度學習和機器學習領域中非常著名的一個數據集,它包含了大量的手寫數字圖像,被廣泛地用於各種分類算法的評測和比較。MNIST數據集一共包含70000張手寫數字的圖片,每張圖片的大小為28 x 28像素。其中,前60000張圖片被用作訓練集,後10000張圖片被用作測試集。訓練集和測試集中的標籤均為0至9的數字。
二、MNIST數據集的下載
要想使用Python讀取MNIST數據集,首先需要下載數據集。在下面的代碼片段中,我們將展示如何使用Python代碼下載MNIST數據集:
from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
以上代碼中,我們使用了TensorFlow自帶的input_data腳本來下載MNIST數據集。該腳本將訓練集、驗證集、測試集分別存儲到MNIST_data文件夾下,並將標籤轉換為one-hot編碼形式,以便於模型訓練時使用。
三、讀取MNIST數據集
有了MNIST數據集的下載,接下來我們就可以開始讀取數據了。在下面的示例代碼中,我們將展示如何使用Python代碼讀取MNIST數據集的訓練集和測試集,以及如何顯示其中一張圖片:
import numpy as np import matplotlib.pyplot as plt # 載入數據集 train = mnist.train.images train_labels = mnist.train.labels test = mnist.test.images test_labels = mnist.test.labels # 顯示數據集中的一張圖片 plt.imshow(np.reshape(train[0], [28, 28]), cmap='gray') plt.show()
以上代碼中,我們使用了NumPy和matplotlib兩個庫,分別用於將圖像數據轉換為矩陣,以及將矩陣顯示為圖像。其中,train和test分別為訓練集和測試集的圖像數據,train_labels和test_labels分別為訓練集和測試集的標籤。我們使用plt.imshow函數來顯示數據集中的一張圖片,該函數中的cmap參數用於指定灰度圖像的顏色映射方式。
四、MNIST數據集的預處理
在進行模型訓練之前,我們需要對MNIST數據集進行一些預處理操作。在本小節中,我們將介紹兩個常用的預處理方法,分別是數據歸一化和數據增強。
1. 數據歸一化
數據歸一化是指將數據的取值範圍縮放到一定區間內的操作。在深度學習和機器學習中,數據歸一化是一項非常重要的預處理方法,常用的數據歸一化方式有兩種:最小-最大規範化和標準化。
最小-最大規範化將數據縮放到[0,1]區間內,其公式如下:
\begin{aligned}
{x}’=\frac{x-min}{max-min}
\end{aligned}
其中,min是數據集中的最小值,max是數據集中的最大值。在下面的代碼中,我們將展示如何使用最小-最大規範化對MNIST數據集進行歸一化處理:
# 最小-最大規範化 def min_max_normalize(data): min_val = np.min(data) max_val = np.max(data) return (data - min_val) / (max_val - min_val) # 對數據集進行歸一化 train = min_max_normalize(train) test = min_max_normalize(test)
以上代碼中,我們定義了一個min_max_normalize函數,用於對輸入數據進行最小-最大規範化處理。在該函數中,我們首先計算出數據集中的最小值和最大值,然後將其應用到數據集中,以得到歸一化後的數據。
2. 數據增強
數據增強是指利用一些變換操作擴充原始數據集的操作,旨在提高模型的泛化能力。在數字識別任務中,常用的數據增強方式有平移、旋轉、縮放等。
對於MNIST數據集,我們可以利用一些平移和旋轉操作生成新的圖像。在下面的代碼中,我們將展示如何使用Python代碼進行平移操作和旋轉操作:
from scipy.ndimage.interpolation import shift, rotate # 平移變換 def shift_image(image, sx, sy): return shift(image.reshape((28, 28)), [sy, sx], cval=0.).reshape([-1]) # 旋轉變換 def rotate_image(image, angle): return rotate(image.reshape((28, 28)), angle, cval=0., reshape=False).reshape([-1]) # 生成平移後的圖像 shifted_imgs = [shift_image(train[i], 5, 5) for i in range(train.shape[0])] # 生成旋轉後的圖像 rotated_imgs = [rotate_image(train[i], 30) for i in range(train.shape[0])]
以上代碼中,我們使用了SciPy中的ndimage模塊中的shift和rotate函數,分別用於進行平移變換和旋轉變換。在shift_image函數中,我們通過調用ndimage.shift函數來實現平移變化,其中sx和sy分別指定x軸和y軸的平移距離。在rotate_image函數中,我們使用ndimage.rotate函數來進行旋轉變化,其中angle指定旋轉角度。
五、小結
本文主要介紹了如何使用Python讀取MNIST數據集,並對數據集進行了預處理操作。雖然MNIST數據集已經是一個非常老舊的數據集了,但它仍廣泛地應用於各種深度學習和機器學習算法的評測和比較中。在使用MNIST數據集進行數字識別任務時,我們需要注意數據的歸一化和增強等預處理操作,以提高模型的準確率和泛化能力。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/233879.html