Maison  >  Article  >  développement back-end  >  Exemple de reconnaissance de chiffres manuscrits en Python

Exemple de reconnaissance de chiffres manuscrits en Python

WBOY
WBOYoriginal
2023-06-11 10:13:362155parcourir

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.

  1. Introduction aux ensembles de données

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.

  1. Chargement de l'ensemble de données

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_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

    Prétraitement des données
    1. Dans l'apprentissage automatique, nous avons généralement besoin de prétraiter les données pour améliorer les performances du modèle. Pour l'ensemble de données MNIST, nous devons convertir les valeurs de pixels en nombres à virgule flottante entre 0 et 1 et convertir l'image 28x28 en un vecteur à 784 dimensions afin de pouvoir l'entrer dans le modèle.
    rrreee

      Construire le modèle

      🎜🎜Construire un réseau de neurones dans Keras est très simple, il suffit de définir un objet Sé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é. 🎜
        🎜Compilez le modèle🎜🎜🎜Avant de former le modèle, nous devons configurer le processus d'apprentissage via la compilation. Ici, nous utilisons la fonction de perte d'entropie croisée et l'optimiseur RMSprop. Dans le même temps, nous ajouterons également la précision comme mesure. 🎜rrreee
          🎜Entraînement du modèle🎜🎜🎜Nous pouvons maintenant entraîner le modèle à l'aide de l'ensemble de données que nous avons chargé. Ici, nous allons entraîner le modèle 5 fois (époques = 5). 🎜rrreee
            🎜Testez le modèle🎜🎜🎜Utilisez le modèle entraîné pour prédire les données de test et calculer la précision. 🎜rrreee
              🎜Application pratique🎜🎜🎜Nous avons maintenant formé un modèle de reconnaissance de chiffres manuscrits et pouvons l'utiliser dans des applications pratiques. Vous trouverez ci-dessous un exemple qui montre comment utiliser un modèle pour reconnaître des chiffres manuscrits. 🎜rrreee🎜Ici, nous utilisons d'abord la fonction 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn