3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TensorFlowとCIFAR-10を使用した画像分類の解説

Last updated at Posted at 2023-12-08

スクリーンショット 2023-12-08 165346.png

はじめに

画像分類は、機械学習の分野で広く使用される技術の一つです。この記事では、TensorFlowを使用してオープンデータを基に簡単に画像分類を行う方法について説明します。

ステップ1: オープンデータの取得

最初のステップは、オープンデータを取得することです。多くのオープンデータセットがオンラインで利用可能で、例えばKaggleImageNetCIFAR-10などがあります。今回は、CIFAR-10データセットを使用します。

import tensorflow as tf

# CIFAR-10データセットの読み込み
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar10.load_data()

CIFAR-10データセットは車や鳥など10カテゴリのデータが含まれています。
実際に取り込んだ画像データから5枚の画像を確認してみます。

# クラス名の定義
class_names = ['Airplane', 'Car', 'Bird', 'Cat', 'Deer', 'Dog', 'Frog', 'Horse', 'Ship', 'Truck']

# 画像の表示
plt.figure(figsize=(10,10))
for i in range(5):
    plt.subplot(5,5,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(x_train[i], cmap=plt.cm.binary)
    # CIFARのラベルは0から始まるので、そのままクラス名にインデックスとして使用
    plt.xlabel(class_names[y_train[i][0]])
plt.show()

スクリーンショット 2023-12-08 124350.png

ステップ2: データの前処理

データをモデルに入力する前に、適切な前処理が必要です。一般的な前処理には、正規化やリサイズなどが含まれます。

# データの正規化
x_train, x_test = x_train / 255.0, x_test / 255.0

ステップ3: モデルの構築と訓練

モデルの構築には、TensorFlowのKeras APIを使用します。ここでは、シンプルなニューラルネットワーク()を構築し、活性化関数としてReLUを使用します。このモデルは入力層、隠れ層、そして出力層から構成され、各層は特定の目的を果たします。モデルのコンパイルでは、最適化アルゴリズム、損失関数、評価指標を定義します。訓練プロセスでは、モデルがデータからパターンを学習することが重要です。

model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(10, activation='softmax')
])
#モデルをコンパイルし、訓練データを使ってモデルを訓練
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=10)

ステップ4: モデルの評価と使用

最後に、テストデータを使ってモデルの性能を評価します。

test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print('\nTest accuracy:', test_acc)

Test accuracy: 0.797700023651123

ステップ5: テスト結果を可視化

モデルの予測を視覚的に確認するために、テスト画像とその予測ラベルを表示てみます。

# テストデータセットから予測を行う
predictions = model.predict(x_test)

# 画像と予測ラベルの表示
plt.figure(figsize=(10,10))
for i in range(10):
    plt.subplot(5,5,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(x_test[i], interpolation='lanczos')
    predicted_label = np.argmax(predictions[i])
    true_label = y_test[i][0]
    if predicted_label == true_label:
        color = 'blue'
    else:
        color = 'red'
    plt.xlabel("{} ({})".format(class_names[predicted_label], 
                                class_names[true_label]),
                                color=color)

それぞれの画像の下に予測ラベルと実際のラベルが表示されます。予測が正しい場合は青色で、間違っている場合は赤色でラベルを表示されます。

今回は10問中、9問が正しくに分類されましたが、1問だけカエル(Frog)が鹿(Deer)と誤認されてしまったことが確認できます。
スクリーンショット 2023-12-08 172009.png

まとめ

この記事では、TensorFlowを使用してオープンデータを基に画像分類を行う方法を紹介しました。この基本的な流れを理解することで、個人の持つ画像データなど、さまざまな種類の画像分類タスクに取り組むことができます。

3
4
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
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?