Heim >Backend-Entwicklung >Python-Tutorial >Beispiel für die handschriftliche Ziffernerkennung in Python
Python ist eine sehr leistungsfähige Programmiersprache, die in der Datenanalyse, beim maschinellen Lernen, in der Bildverarbeitung und in anderen Bereichen weit verbreitet ist. Im Bereich des maschinellen Lernens ist die handschriftliche Ziffernerkennung ein sehr wichtiges Thema und kann auf viele Bereiche wie die Erkennung von Verifizierungscodes, autonomes Fahren und Spracherkennung angewendet werden. In diesem Artikel stellen wir vor, wie man die handschriftliche Ziffernerkennung mit Python implementiert.
Beim maschinellen Lernen ist die Auswahl von Datensätzen sehr wichtig. Für das Problem der handschriftlichen Ziffernerkennung benötigen wir einen beschrifteten Datensatz. Der am häufigsten verwendete Datensatz ist der MNIST-Datensatz (Modified National Institute of Standards and Technology), der insgesamt 60.000 Trainingsbilder und 10.000 Testbilder enthält. Jedes Bild ist ein 28 x 28 Pixel großes Graustufenbild.
Um den MNIST-Datensatz zu verwenden, können wir ihn über die Python-Bibliothek laden. In diesem Beispiel verwenden wir die Keras-Bibliothek von Tensorflow, um den MNIST-Datensatz zu laden.
from keras.datasets import mnist # 加载MNIST数据集 (train_images, train_labels), (test_images, test_labels) = mnist.load_data()
Hier speichern wir Trainingsbilder und Beschriftungen in train_images
und train_labels
und Testbilder und Beschriftungen in test_images
und test_labels
. 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
Aufbau des Modells
🎜🎜Der Aufbau eines neuronalen Netzwerks in Keras ist sehr einfach, wir müssen nur einSequential
-Objekt definieren und dann Ebenen hinzufügen. Für dieses handschriftliche Ziffernerkennungsproblem verwenden wir ein einfaches neuronales Netzwerk mit zwei dichten Schichten. 🎜rrreee🎜Hier verwenden wir eine Dense
-Schicht, in der jedes Neuron mit allen Neuronen in der vorherigen Schicht verbunden ist, und verwenden eine ReLU-Aktivierungsfunktion, um Nichtlinearität hinzuzufügen. 🎜image.load_img
, um ein Bild handgeschriebener Ziffern zu laden und es dann in das vom Modell benötigte Format zu konvertieren. Verwenden Sie abschließend die Funktion network.predict
, um die Ergebnisse vorherzusagen und auszugeben. 🎜🎜🎜Zusammenfassung🎜🎜🎜In diesem Artikel haben wir vorgestellt, wie man die handschriftliche Ziffernerkennung mithilfe der Python- und Keras-Bibliothek implementiert. In diesem Prozess lernten wir das Laden des MNIST-Datensatzes, die Datenvorverarbeitung, den Aufbau eines neuronalen Netzwerkmodells, das Kompilieren des Modells, das Training des Modells, das Testen des Modells und praktische Anwendungen. Ich hoffe, dieses Beispiel kann Anfängern helfen, maschinelles Lernen besser zu verstehen. 🎜Das obige ist der detaillierte Inhalt vonBeispiel für die handschriftliche Ziffernerkennung in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!