Kerasで画像分類をする方法

logo_Python

kerasを利用することで誰でも簡単に画像分類をすることができます。Kerasは、比較的に構造がシンプルで扱いやすいこともあり、機械学習やディープラーニングの初心者が実装や実験を行うのに適したライブラリです。

目次

はじめに

今回はKerasで画像分類を実装していきます。

Kerasは、比較的に構造がシンプルで扱いやすいこともあり、機械学習やディープラーニングの初心者が実装や実験を行うのに適したライブラリです。

必要なデータの用意

まず、必要なものを用意します。

from keras.datasets import mnist
from keras.utils import to_categorical
from keras.layers import Dense
from keras.model import Sequential

今回使うデータセットはmnistです。

mnistは、手書き数字「0~9」の訓練画像60,000枚と、テスト画像10,000枚を集めた画像データセットです。

(x_train,y_train),(x_test,y_test) = mnist.load_data()

mnistを訓練データ(x_train,y_train)とテストデータ(x_test,y_test)に分けます。

データの前処理

次にデータの前処理を行っていきます。

x_train = x_train.reshape(60000,784)
x_test = x_test.reshape(10000,784)

x_train = x_train/255 
x_test = x_test/255 

y_train = to_categorical(y_train,10) 
y_test = to_categorical(y_test,10)

x_trainとx_testは縦:28px、横:28pxの画像なので、処理しやすいように784(28×28)に変換します。

さらに、x_trainとx_testをRGB値の255で割ることで正規化します。

to_categoricalを使うことでone_hotベクトルにしています。(今回の場合は、分類する数字が「0~9」なので10としています。)

モデルの構築

今回はSequentialモデルを使用します。

Sequentialモデルはシンプルな一直線のモデルを構築できます。

Sequentialモデルを使うことで、手書き数字の画像を入力値とし、それが0~9のどの数であるかを出力することができます。

model = Sequential()

model.add(
    Dense(
        input_shape = (784,),
        units = 64,
        activation = "relu"
        )
)

model.add(
    Dense(
        units = 10,
        activation = "softmax"
        )
)

1つ目のmodel.addで中間層、2つ目のmodel.addで出力層を構築しています。

input_shape:入力層の形です。(今回の場合はx_trainが(60000,784)なのでinput_shape = (784,)です。)

units:ニューロン数です。(今回の場合は中間層のニューロン数が64、出力層のニューロン数が10です。)

activation:活性化関数です。

実行結果

modelの構築が完了したら、modelをcompileし、modelをfitさせます。

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

model.fit(
    x_train,
    y_train,
    epochs = 20,
    batch_size = 120,
    verbose = 1,
    validation_data = [x_test,y_test]
)

【compileの説明】

今回はoptimizer = “adam”,

loss = “categorical_crossentropy”とします。

【fitの説明】

batch_size:1回に計算するデータの数のことです。(一般的に2のn乗に設定されます。)

epochs:一つの学習データを何回繰り返して学習させるかを決めます。

activation:活性化関数です。

verbose:ログ出力の指定です。

validation_data:学習に使用していないデータです。(今回の場合はx_test、y_test)

 

model.evaluateで評価関数、損失関数の結果を見てみましょう。

score = model.evaluate(x_test,y_test)
print(f"loss:{score[0]}")
print(f"accuracy:{score[1]}")

今回は評価関数が0.9745、損失関数が0.089でした。

 

 

まとめ

今回はKerasでmnistの画像分類を実装しました。

mnistはシンプルなデータセットなので、Sequentialモデルでも高いスコアを出すことができました。

CTA
  • URLをコピーしました!
  • URLをコピーしました!
この記事を書いた人
目次