Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

Keras基礎をまとめてみた

kaggle挑戦中のElsammitですw
機械学習超初心者ですw

今回はKerasって何?から基礎的な部分をアヤメの分類を例にまとめてみました!!
f:id:Elsammit:20210401224604p:plain



■Kerasとは?

Kerasとは、TensorFlow上で動くニューラルネットワークの1つです。
Kerasを使用するとディープラーニングのベースとなる数学的な部分を気にせずとも比較的短いソースコードで実装することが出来るようになります。

Kerasの他にも同様にニューラルネットワークライブラリとして他にもライブラリが存在しますが、、、
Kerasのメリットとして、
 ・構築が容易
 ・可読性が高い
があります。
しかしながら、計算速度が低く低パフォーマンスであることがデメリットになります。

■Kerasを試してみる

ではKerasを使ってみたいと思います。
まずはアヤメの分類をKerasで行ってみたいと思います!!

import keras
import tensorflow as tf
from sklearn import datasets
from keras.models import Sequential
from keras.layers import Dense, Activation
from matplotlib import pyplot
iris = datasets.load_iris()
 
#モデルの定義
model = Sequential()
model.add(Dense(32,input_dim=4))
model.add(Activation('relu'))
model.add(Dense(units=6,input_dim=32))
model.add(Activation('softmax'))
 
#モデルの構築
model.compile(loss='sparse_categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
 
#訓練データとテストデータの分割
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(iris.data, iris.target, test_size=0.2)
 
#学習の実行
history = model.fit(X_train,y_train,epochs=100)

#エポック毎のaccuracy結果グラフ化
pyplot.plot(history.history['accuracy'])
pyplot.title('model accuracy')
pyplot.ylabel('accuracy')
pyplot.xlabel('epoch')
pyplot.legend(['train', 'test'], loc='upper left')
pyplot.show()
    
#評価の実行
score = model.evaluate(X_test,y_test,batch_size=1)
print(score[1])

Kerasではモデル定義とモデル構築、学習実行の3段階で構築されます。

モデル構築のコードはこちらになります。

model = Sequential()
model.add(Dense(32,input_dim=4))
model.add(Activation('relu'))
model.add(Dense(units=6,input_dim=32))
model.add(Activation('softmax'))

まずはどんなニューラルネットワークなのかを定義します。
今回はSequentialモデルを用いました。
Sequentialモデルはニューラルネットワークの各層を順番につなげたモデルを表します。

model = Sequential()

次に入力層側隠れ層を作成します。
アヤメは入力の次元が4次元ですので、

model.add(Dense(32,input_dim=4))

としました。
こちらの"32"ですが、隠れ層として32層作成することを意味しております。
そして、活性化関数としてrelu関数を挿入し、

model.add(Activation('relu'))

出力層側の隠れ層を作成します。

model.add(Dense(units=6,input_dim=32))

ここでunitsですが、
出力層の出力数にあたります。

これでモデルの定義が行えました。

次に先ほど定義したモデルを構築していきます。
構築のコードはこちら。

model.compile(loss='sparse_categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])

lossには損失関数を設定し、metricsには評価関数を指定します。
metricsには一般的に['accuracy']を設定するとのこと。

metricsは自分で作った評価関数を渡すことも可能とのこと。

最後に、
optimizerには最適化のためのアルゴリズムを設定します。
今回はSGDを用いました。

そしてそして、、、
学習を実行!!

history = model.fit(X_train,y_train,epochs=100)

エポック数は100に設定。

■kerasでアヤメを分類

では先ほどのコードでアヤメを分類していきます。
まずはエポック毎のトレーニング結果をグラフにまとめました。
f:id:Elsammit:20210401222233p:plain
結構高精度ですね!!

次に評価結果ですが、accuracyは
0.9667
とかなり高精度での分類が行えました!!

■(補足)SGDとは??

SGDとは、確率勾配降下法(stochastic gradient descent)の略で
Optimizerの中でも初期に提唱された最も基本的なアルゴリズムになります。

qiitaにSGDについてまとめられておりましたので、詳細はこちらをどうぞ!!
こちらの記事にはSGDの他にも最適化アルゴリズムがまとめられておりましたので勉強になるかと思います。
https://qiita.com/tokkuman/items/1944c00415d129ca0ee9

■最後に

今回はKerasの基本的なことをまとめてみました!!
Kerasを用いてKaggle内のコンペを解いてみたいと思います。
上手くできたらブログにまとめたいと思います。