手把手教你使用Python讀取MNIST數據集

一、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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-11 17:12
下一篇 2024-12-11 17:12

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中new和init的區別

    new和init都是Python中常用的魔法方法,它們分別負責對象的創建和初始化,本文將從多個角度詳細闡述它們的區別。 一、創建對象 new方法是用來創建一個對象的,它是一個類級別…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字符串操作中,capitalize函數常常被用到,這個函數可以使字符串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python for循環求1到100的積

    Python中的for循環可以方便地遍歷列表、元組、字典等數據類型。本文將以Python for循環求1到100的積為中心,從多個方面進行詳細闡述。 一、for循環語法 Pytho…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29

發表回復

登錄後才能評論