SecondhandLabo

+Blog

【超簡単】AIの作り方を紹介!

書いた人:SEAN 2023/4/26


(※こちら完全にTensorFlowのチュートリアルページのパクリとなっております。むしろ、TensorFlowのページの方がわかりやすいという状況でございます。まだBlog書き始めの頃でしたので、ご了承ください。)


最近、ニュースやSNSなどで様々なAIが話題になっていますよね。
そんな中、少しはAIを触っておきたいけど、何から始めれば良いのかわからない、、という人も多いでしょう。
そこで、今回はそんな人たちのために超簡単なAIの作り方を紹介します!

AIとはなんぞや?

正直、AIってなんなのかよくわかってない、、という人のために、AIとはなんなのかをchatGPTに聞いてみた。

chatGPTによると、

AIとは、「人工知能(Artificial Intelligence)」の略であり、コンピュータや機械に人間の知的能力を模倣させる技術のことを指します。AIは、自然言語処理、画像認識、機械学習、深層学習、強化学習などの技術を利用して、様々なタスクを自律的に処理することができます。一般的な応用例としては、自動運転、音声認識、顔認識、商品推薦、自然言語処理などがあります。

とのこと。

本題

それでは、AIの超簡単な作り方を紹介していきます。
使うものは、TensorFlowというGoogleが開発した機械学習のためのオープンソース プラットフォーム。
TensorFlowのチュートリアルをやることで、基本的な画像認識AIを作ることができます。

TensorFlowのチュートリアル↓

https://www.tensorflow.org/tutorials?hl=ja

今回は、チュートリアルの中のはじめてのニューラルネットワーク:分類問題の初歩というものをやっていきます。 このBlogでは簡単なやり方を説明するので、詳しいことは公式のチュートリアルを見てください。

はじめてのニューラルネットワーク↓

https://www.tensorflow.org/tutorials/keras/classification?hl=ja

ここで作るAIは、Fashion MNISTというデータセットを使って、身に付けるもの(Tシャツ、靴、ズボンなど)を分類するという基本的な画像認識AI。 画像認識AIを動かすには高スペックなGPU(グラフィックボード)が必要になります。しかし、今回はそのようなスペックのPCは必要ありません!

このチュートリアルでは、Google Colabというブラウザ上でpythonを実行できるツールを使います。Google Colabは、以下のようなスペックが提供されています。

  • CPU: 2 コアの Intel Xeon プロセッサ
  • GPU: NVIDIA Tesla T4 (16GB)
  • RAM: 12GB〜27GB
  • ストレージ: Google Drive に保存される仮想マシン内の一時ディスク

むっちゃ高スペック!(しかも無料)

書いてみよう

それでは、実際にAIを作ってみよう!

Step_1

まず、Google Colabを開いてファイル→新しいノートブックを作りましょう。

ノートブックを作ったら、以下のコマンドを実行!

# TensorFlow and tf.keras
import tensorflow as tf

# Helper libraries
import numpy as np
import matplotlib.pyplot as plt

print(tf.__version__)

実行は赤丸のところをクリック↓

TensorFlowのバージョンが出力されたら成功!
このコードは、簡単にいうとGoogle ColabでTensorFlowを使えるようにするためにライブラリをインポートしています。

Step_2

次に、左上にある [+コード] というボタンをクリックして新しくコードを書けるようにしましょう。

そして、このコードを実行!

このコードは、TensorFlowのFashion MNISTデータセットを読み込んで、訓練用とテスト用の画像とラベルを分割して取得するもので、 訓練用画像とラベル、テスト用画像とラベルをそれぞれの変数に格納して、各ラベルのクラス名を定義しています。

fashion_mnist = tf.keras.datasets.fashion_mnist

(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
                'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot'] 

Step_3

次はこれを実行。

plt.figure()
plt.imshow(train_images[0])
plt.colorbar()
plt.grid(False)
plt.show()

AIのトレーニングをする前に、データを前処理する必要があります。今のコードを実行すると、色のついた靴が出力されるはず。 これをモノクロにする必要があるので、次のコードを実行します。

train_images = train_images / 255.0

test_images = test_images / 255.0

これで、前処理は完了!

Step_4

このコードは、筆者もよく理解していないけどとにかく実行!(詳しいことはチュートリアルを見てネ)

model = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(10)
])
model.compile(optimizer='adam',
            loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
            metrics=['accuracy'])

Step_5

さあ、ついにお待ちかねのモデルのトレーニング!

このコードを実行すると、今作ってきたデータを使って機械学習が始まります。10回繰り返すので、終わるまで少し待ちましょう。

model.fit(train_images, train_labels, epochs=10)

トレーニングが終わったら、正解率を確認します。

test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)

print('\nTest accuracy:', test_acc)

Test accuracy:という部分の数字が正解率を示しています。maxが1.0。

Step_6

それでは、テスト用の画像で予測できるか試してみましょう。

probability_model = tf.keras.Sequential([model, 
                    tf.keras.layers.Softmax()])

predictions = probability_model.predict(test_images)

これで予測できるデータに変換できたので、次のコードで予想の結果を見てみましょう。

predictions[0]

数字は、その画像がどの衣類に当てはまるかの確信度を表しています。下のコードを実行することでどのラベルが一番確信度が高いかを見ることができます。

np.argmax(predictions[0])

それでは、これをわかりやすくグラフ化します。

def plot_image(i, predictions_array, true_label, img):
  true_label, img = true_label[i], img[i]
  plt.grid(False)
  plt.xticks([])
  plt.yticks([])

  plt.imshow(img, cmap=plt.cm.binary)

  predicted_label = np.argmax(predictions_array)
  if predicted_label == true_label:
    color = 'blue'
  else:
    color = 'red'

  plt.xlabel("{} {:2.0f}% ({})".format(class_names[predicted_label],
                                100*np.max(predictions_array),
                                class_names[true_label]),
                                color=color)

def plot_value_array(i, predictions_array, true_label):
  true_label = true_label[i]
  plt.grid(False)
  plt.xticks(range(10))
  plt.yticks([])
  thisplot = plt.bar(range(10), predictions_array, color="#777777")
  plt.ylim([0, 1])
  predicted_label = np.argmax(predictions_array)

  thisplot[predicted_label].set_color('red')
  thisplot[true_label].set_color('blue')

下のコードを実行すると、テストの結果をグラフで見ることができます。正解が青いグラフで、間違いが赤です。

# Plot the first X test images, their predicted labels, and the true labels.
# Color correct predictions in blue and incorrect predictions in red.
num_rows = 5
num_cols = 3
num_images = num_rows*num_cols
plt.figure(figsize=(2*2*num_cols, 2*num_rows))
for i in range(num_images):
    plt.subplot(num_rows, 2*num_cols, 2*i+1)
    plot_image(i, predictions[i], test_labels, test_images)
    plt.subplot(num_rows, 2*num_cols, 2*i+2)
    plot_value_array(i, predictions[i], test_labels)
plt.tight_layout()
plt.show()

確信度が高くても、間違っているものもあることがわかると思います。

というわけで、簡単なAIを完成させることができました!

Step_7

最後に、完成したAIを使って別の画像で予測をしてもらいましょう。このコードを順番に実行してください。

# Grab an image from the test dataset.
img = test_images[1]
# Add the image to a batch where it's the only member.
img = (np.expand_dims(img,0))

print(img.shape)
predictions_single = probability_model.predict(img)
print(predictions_single)
plot_value_array(1, predictions_single[0], test_labels)
_ = plt.xticks(range(10), class_names, rotation=45)
plt.show()

グラフの色が青ければ予測成功です。

まとめ

今回は、TensorFlowを使って簡単な画像分類AIを作ってみましたが、いかがだったでしょうか?今回の内容をさらに応用させていけばさらに複雑なAIも作ることができると思います。 筆者も絶賛AI勉強中で、復習がてらこのBlogを書いてみました。詳しいことは全て公式のチュートリアル書いてあるので、ぜひそっちを見てみてください。

SecondhandLabo 公式