Maison >développement back-end >Tutoriel Python >Exemple de reconnaissance de chiffres manuscrits en Python
Python est un langage de programmation très puissant largement utilisé dans l'analyse de données, l'apprentissage automatique, le traitement d'images et d'autres domaines. Dans le domaine de l'apprentissage automatique, la reconnaissance des chiffres manuscrits est une question très importante et peut être appliquée à de nombreux domaines tels que la reconnaissance des codes de vérification, la conduite autonome et la reconnaissance vocale. Dans cet article, nous présenterons comment implémenter la reconnaissance de chiffres manuscrits à l'aide de Python.
En apprentissage automatique, la sélection des ensembles de données est très importante. Pour le problème de la reconnaissance des chiffres manuscrits, nous avons besoin d’un ensemble de données étiquetées. L'ensemble de données le plus couramment utilisé est l'ensemble de données MNIST (Modified National Institute of Standards and Technology), qui contient un total de 60 000 images de formation et 10 000 images de test. Chaque image est une image en niveaux de gris de 28 x 28 pixels.
Afin d'utiliser l'ensemble de données MNIST, nous pouvons le charger via la bibliothèque python. Dans cet exemple, nous utilisons la bibliothèque Keras de Tensorflow pour charger l'ensemble de données MNIST.
from keras.datasets import mnist # 加载MNIST数据集 (train_images, train_labels), (test_images, test_labels) = mnist.load_data()
Ici, nous stockons les images et les étiquettes d'entraînement dans train_images
et train_labels
et testons les images et les étiquettes dans test_images
et 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
Construire le modèle
🎜🎜Construire un réseau de neurones dans Keras est très simple, il suffit de définir un objetSéquentiel
puis d'ajouter des couches. Pour ce problème de reconnaissance de chiffres manuscrits, nous utilisons un simple réseau de neurones avec deux couches denses. 🎜rrreee🎜Ici, nous utilisons une couche Dense
, où chaque neurone est connecté à tous les neurones de la couche précédente, et utilise une fonction d'activation ReLU pour ajouter de la non-linéarité. 🎜image.load_img
pour charger une image de chiffres manuscrits, puis la convertissons au format requis par le modèle. Enfin, utilisez la fonction network.predict
pour prédire et afficher les résultats. 🎜🎜🎜Résumé🎜🎜🎜Dans cet article, nous avons présenté comment implémenter la reconnaissance de chiffres manuscrits à l'aide de la bibliothèque Python et Keras. Au cours de ce processus, nous avons appris à charger l'ensemble de données MNIST, au prétraitement des données, à la construction d'un modèle de réseau neuronal, à la compilation du modèle, à la formation du modèle, au test du modèle et aux applications pratiques. J'espère que cet exemple pourra aider les débutants à mieux comprendre l'apprentissage automatique. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!