Python是一門非常強大的程式語言,廣泛應用於資料分析、機器學習、影像處理等領域。在機器學習領域中,手寫數字辨識是一個非常重要的問題,可以應用於驗證碼辨識、自動駕駛、語音辨識等多個領域。在本文中,我們將介紹如何用Python實現手寫數字辨識。
在機器學習中,資料集的選擇非常重要。對於手寫數字辨識問題而言,我們需要一個帶有標籤的資料集。最常用的資料集是MNIST(Modified National Institute of Standards and Technology)資料集,總共包含了60,000張訓練圖和10,000張測試圖,每張影像都是28x28像素的灰階影像。
為了使用MNIST資料集,我們可以透過python的函式庫來載入它。在這個例子中,我們使用Tensorflow的Keras函式庫來載入MNIST資料集。
from keras.datasets import mnist # 加载MNIST数据集 (train_images, train_labels), (test_images, test_labels) = mnist.load_data()
這裡我們將訓練圖像和標籤儲存在train_images
和train_labels
中,將測試圖像和標籤儲存在test_images
和test_labels
中。
在機器學習中,我們通常需要對資料進行預處理,以提高模型的表現。對於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
在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活化函數來增加非線性。
在訓練模型之前,我們需要透過編譯來設定學習過程。在這裡,我們使用交叉熵損失函數和RMSprop優化器。同時,我們也將加入準確率作為衡量指標。
network.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
現在我們可以使用我們載入的資料集來訓練模型了。在這裡,我們將訓練模型5次(epochs=5)。
network.fit(train_images, train_labels, epochs=5, batch_size=128)
使用訓練好的模型對測試資料進行預測並計算準確率。
test_loss, test_acc = network.evaluate(test_images, test_labels)
現在我們已經訓練了一個手寫數字辨識模型,可以在實際應用中使用了。以下是一個例子,示範如何使用模型來識別手寫數字。
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
函數進行預測,並輸出結果。
在本文中,我們介紹如何使用Python和Keras函式庫實作手寫數字辨識。在這個過程中,我們學習了載入MNIST資料集、資料預處理、建立神經網路模型、編譯模型、訓練模型、測試模型以及實際應用。希望這個例子可以幫助初學者更好地理解機器學習。
以上是Python中的手寫數位辨識實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!