首頁  >  文章  >  後端開發  >  Python中的手寫數位辨識實例

Python中的手寫數位辨識實例

WBOY
WBOY原創
2023-06-11 10:13:362156瀏覽

Python是一門非常強大的程式語言,廣泛應用於資料分析、機器學習、影像處理等領域。在機器學習領域中,手寫數字辨識是一個非常重要的問題,可以應用於驗證碼辨識、自動駕駛、語音辨識等多個領域。在本文中,我們將介紹如何用Python實現手寫數字辨識。

  1. 資料集介紹

在機器學習中,資料集的選擇非常重要。對於手寫數字辨識問題而言,我們需要一個帶有標籤的資料集。最常用的資料集是MNIST(Modified National Institute of Standards and Technology)資料集,總共包含了60,000張訓練圖和10,000張測試圖,每張影像都是28x28像素的灰階影像。

  1. 載入資料集

為了使用MNIST資料集,我們可以透過python的函式庫來載入它。在這個例子中,我們使用Tensorflow的Keras函式庫來載入MNIST資料集。

from keras.datasets import mnist

# 加载MNIST数据集
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

這裡我們將訓練圖像和標籤儲存在train_imagestrain_labels 中,將測試圖像和標籤儲存在test_imagestest_labels 中。

  1. 資料預處理

在機器學習中,我們通常需要對資料進行預處理,以提高模型的表現。對於MNIST資料集,我們需要將像素值轉換為0到1之間的浮點數,並將28x28的影像轉換為784維向量,以便我們可以將其輸入到模型中。

# 数据预处理
train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype('float32') / 255

test_images = test_images.reshape((10000, 28 * 28))
test_images = test_images.astype('float32') / 255
  1. 建立模型

在Keras中建立神經網路非常簡單,我們只需要定義一個Sequential對象,然後新增層即可。對於這個手寫數字辨識問題,我們使用一個包含兩個密集層的簡單神經網路。

from keras import models
from keras import layers

network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
network.add(layers.Dense(10, activation='softmax'))

這裡我們使用 Dense 層,每個神經元都與前一層的所有神經元相連,並使用ReLU活化函數來增加非線性。

  1. 編譯模型

在訓練模型之前,我們需要透過編譯來設定學習過程。在這裡,我們使用交叉熵損失函數和RMSprop優化器。同時,我們也將加入準確率作為衡量指標。

network.compile(optimizer='rmsprop',
                loss='categorical_crossentropy',
                metrics=['accuracy'])
  1. 訓練模型

現在我們可以使用我們載入的資料集來訓練模型了。在這裡,我們將訓練模型5次(epochs=5)。

network.fit(train_images, train_labels, epochs=5, batch_size=128)
  1. 測試模型

使用訓練好的模型對測試資料進行預測並計算準確率。

test_loss, test_acc = network.evaluate(test_images, test_labels)
  1. 實際應用

現在我們已經訓練了一個手寫數字辨識模型,可以在實際應用中使用了。以下是一個例子,示範如何使用模型來識別手寫數字。

import numpy as np
from keras.preprocessing import image

# 加载手写数字图像
img = image.load_img(path_to_img, grayscale=True, target_size=(28, 28))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)

# 预测手写数字
prediction = network.predict(x)

# 输出结果
print(prediction)

這裡我們先使用image.load_img函數載入一個手寫數字映像,然後將其轉換為模型所需的格式。最後使用network.predict函數進行預測,並輸出結果。

  1. 總結

在本文中,我們介紹如何使用Python和Keras函式庫實作手寫數字辨識。在這個過程中,我們學習了載入MNIST資料集、資料預處理、建立神經網路模型、編譯模型、訓練模型、測試模型以及實際應用。希望這個例子可以幫助初學者更好地理解機器學習。

以上是Python中的手寫數位辨識實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn