Python での手書き数字認識の例

WBOY
WBOYオリジナル
2023-06-11 10:13:362241ブラウズ

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 に保存します。 ### で。

    データの前処理
機械学習では、通常、モデルのパフォーマンスを向上させるためにデータを前処理する必要があります。 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 オブジェクトを定義してレイヤーを追加するだけです。 。この手書き数字認識問題では、2 つの高密度層を持つ単純なニューラル ネットワークを使用します。

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。