0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

猿でもわかるAIプログラミングシリーズ 🐵💻 AIに手書き数字を認識させる(MNIST入門)

Posted at

1. はじめに:AIに「数字」を理解させるってどういうこと?

AIに「この画像は数字の7です」と教えることは、まるで子供に数字の書き方を教えるようなものです。でも、子供と違ってAIには「目」も「常識」もありません。
それでも、機械学習ディープラーニングを使えば、コンピュータに手書き数字を認識させることができるのです。

本記事では、機械学習初心者の方でも理解しやすいように、**MNIST(手書き数字画像データセット)**を使ったAIモデル構築の基礎をステップ・バイ・ステップで解説します。
しかも、実際のコード付き!すぐに試せる形で紹介します。


2. MNISTとは?AI学習の“九九”です

**MNIST(Modified National Institute of Standards and Technology database)**は、0〜9の手書き数字画像(28x28ピクセル)を集めた超有名なデータセット。
以下のような画像が含まれています:

mnist_sample

  • 訓練用画像:60,000枚
  • テスト用画像:10,000枚

学習目的はシンプル:
画像を見て、正しい数字(0〜9)を当てられるようにすること

MNISTは、

  • 小さくて軽い
  • すぐに使える
  • チュートリアルが豊富

という特徴から、AIの登竜門として最適です。


3. ハンズオン:MNISTを使ってAIを作ってみよう!

今回はPython + TensorFlow(Keras API)を使って、**シンプルなニューラルネットワーク(MLP)**を構築してみましょう。

🔧 3.1 環境構築(Google Colab推奨)

Google Colabで実行できます。ローカルの場合は以下をインストール:

pip install tensorflow

📦 3.2 データの読み込み

import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical

# データ読み込み
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# 正規化(0〜1に変換)
x_train = x_train.reshape(-1, 28*28) / 255.0
x_test = x_test.reshape(-1, 28*28) / 255.0

# ラベルをone-hotに変換
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)

🧠 3.3 モデルの構築と学習

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

model = Sequential([
    Dense(128, activation='relu', input_shape=(784,)),
    Dense(64, activation='relu'),
    Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5, batch_size=32, validation_split=0.1)

✅ 3.4 評価してみよう

test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Test Accuracy: {test_acc:.2f}")

4. よくある落とし穴と実践的アドバイス

⚠️ 落とし穴

  • 正規化を忘れると精度が極端に下がる
  • one-hotエンコーディングをしないとエラーになる
  • エポック数が少なすぎて学習が不十分

💡 実践アドバイス

  • 最初は小さなモデルでOK、徐々に複雑にしていくと理解が深まる
  • 精度よりもまずは**「ちゃんと動く」ことを優先**
  • 学習曲線(loss/accuracyの推移)を見て、過学習の兆候を観察しよう

5. 発展編:CNNを使えば精度アップ!

実は、画像認識には**畳み込みニューラルネットワーク(CNN)**が非常に強力です。
以下は簡単なCNN版のモデル:

from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten

# データを28x28x1に変形
x_train_cnn = x_train.reshape(-1, 28, 28, 1)
x_test_cnn = x_test.reshape(-1, 28, 28, 1)

model = Sequential([
    Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)),
    MaxPooling2D((2,2)),
    Flatten(),
    Dense(64, activation='relu'),
    Dense(10, activation='softmax')
])

このモデルであれば、テスト精度98%以上も現実的です!


6. まとめ:MNISTはAI学習の最高の第一歩

✅ このチュートリアルで学べたこと

  • MNISTとは何か、どう使うか
  • シンプルなMLPモデルの実装
  • 実際に画像分類AIを作る体験
  • CNNによる精度向上の可能性

🔍 今後の展望

  • 他の画像データ(自作や他のオープンデータ)で応用
  • モデルの軽量化・高速化(例えばMobileNet)
  • 本格的なMLOpsへの発展

📎 補足:Colabで実行したい方はこちら

👉 [Google Colab ノートブックのリンク(GitHubにアップした場合)]


👨‍💻 最後に:学ぶには「動かす」が一番!

「AIって難しそう…」と思っている方も、まずは手を動かしてみることで、その印象は大きく変わるはずです。
MNISTのような題材からスタートすれば、楽しみながらAIプログラミングに慣れていけます。


ご意見・質問はコメント欄へどうぞ!
Qiitaでスキ・LGTMしていただけると励みになります 🙏

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?