0
0

More than 1 year has passed since last update.

二つの画像を分類する簡単なAIを作る

Last updated at Posted at 2023-06-08

序論

こんにちは、今日はAIの世界に足を踏み入れてみましょう。具体的には、MNISTという手書き数字のデータセットを使って、数字の[3]と[4]を見分けるAIを作ります。この記事では、AIの作り方を一から説明します。プログラミングの経験がない方でも大丈夫。小学生でもわかるように説明しますので、一緒に楽しみながら学んでいきましょう。

AIとは?

まずは基本から。AIとは何でしょう?AIはArtificial Intelligenceの略で、日本語では「人工知能」と訳されます。人間が持つ知能をコンピュータ上で再現しようとする技術のことを指します。例えば、人間が自然に行うような判断や学習、認識などをコンピュータにさせることがAIの目標です。

機械学習とは?

AIの中でも特に注目されているのが「機械学習」です。機械学習は、人間がプログラムを書く代わりに、コンピュータが自分で学習して問題を解く技術のことを指します。具体的には、大量のデータからパターンを見つけ出し、そのパターンを使って新しいデータに対する予測を行います。

ニューラルネットワークとは?

ニューラルネットワークは、機械学習の一種で、人間の脳の神経細胞(ニューロン)の働きを模倣したものです。ニューロンは複数の入力を受け取り、それらの入力に基づいて出力を行います。ニューラルネットワークも同様に、複数の入力データを受け取り、それらのデータに基づいて出力を行います。

それでは、これらの概念を使って、実際にAIを作ってみましょう。

プログラムの準備と今回作成するAIについて

今回は、MNISTデータセットを使って、数字の3と、4の画像を判別するAIを作ります。
まずは必要なライブラリをインポートします。今回は、PythonのライブラリであるTensorFlowとKerasを使います。TensorFlowは機械学習のためのライブラリで、KerasはTensorFlowをより簡単に操作するためのライブラリです。詳しくはTensorFlowの公式チュートリアルKerasの公式ドキュメンテーションを参照してみてください。

import tensorflow as tf
from tensorflow import keras

データセットの準備

次に、MNISTの手書き数字データセットを読み込みます。MNISTは機械学習でよく使われるデータセットで、0から9までの手書き数字の画像とそのラベル(正解の数字)が含まれています。今回はこの中から34の画像だけを使います。

# MNISTデータセットの読み込み
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

# [3]と[4]のデータだけを抽出
train_filter = (y_train == 3) | (y_train == 4)
test_filter = (y_test == 3) | (y_test == 4)

x_train, y_train = x_train[train_filter], y_train[train_filter]
x_test, y_test = x_test[test_filter], y_test[test_filter]

# ラベルを二値化([3]を0、[4]を1に変換)
y_train[y_train == 3] = 0
y_train[y_train == 4] = 1
y_test[y_test == 3] = 0
y_test[y_test == 4] = 1

モデルの構築

次に、ニューラルネットワークのモデルを構築します。今回はシンプルな全結合層(Dense)のみからなるモデルを作ります。全結合層は、前の層の全てのニューロンが次の層の全てのニューロンと結合している層のことを指します。

# モデルの構築
model = keras.models.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(1, activation='sigmoid')
])

モデルの学習

モデルを構築したら、次はモデルを学習させます。学習とは、訓練データを使ってモデルのパラメータを調整することを指します。モデルのパラメータとは、ニューロンの重みやバイアスのことを指します。

# モデルのコンパイル
model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])

# モデルの学習
model.fit(x_train, y_train, epochs=5)

モデルの評価

学習が終わったら、モデルの性能を評価します。評価とは、テストデータを使ってモデルの予測精度を確認することを指します。テストデータはモデルの学習には使われていない新しいデータで、これを使ってモデルの性能を評価することで、モデルが未知のデータに対してどれくらいの予測精度を持つかを確認します。

# モデルの評価
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print('\nTest accuracy:', test_acc)

モデルの利用

最後に、学習したモデルを使って、新しい画像が[3]なのか[4]なのかを予測してみましょう。ここでは、デスクトップに保存されている画像を読み込んで予測を行います。

from PIL import Image
import numpy as np

# 画像の読み込み
img = Image.open('desktop/my_image.png').convert('L')

# 画像をMNISTのデータ形式に変換
img = img.resize((28, 28))
img = np.array(img) / 255.0

# モデルを使って予測
prediction = model.predict(img[None, ...])

# 予測結果の表示
if prediction < 0.5:
    print("This image is [3]")
else:
    print("This image is [4]")

desktop/my_image.png ここには自分のファイルパスを入れてください。
これで正解すれば、分類型AIは完成です。

以上で、MNISTの手書き数字データセットを使って、34を分類するAIの作り方を説明しました。AIや機械学習についてはまだまだ深いですが、この記事が皆さんの学習の一助になれば幸いです。

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