Keras基礎をまとめてみた
kaggle挑戦中のElsammitですw
機械学習超初心者ですw
今回はKerasって何?から基礎的な部分をアヤメの分類を例にまとめてみました!!
■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でアヤメを分類
では先ほどのコードでアヤメを分類していきます。
まずはエポック毎のトレーニング結果をグラフにまとめました。
結構高精度ですね!!
次に評価結果ですが、accuracyは
0.9667
とかなり高精度での分類が行えました!!
■(補足)SGDとは??
SGDとは、確率勾配降下法(stochastic gradient descent)の略で
Optimizerの中でも初期に提唱された最も基本的なアルゴリズムになります。
qiitaにSGDについてまとめられておりましたので、詳細はこちらをどうぞ!!
こちらの記事にはSGDの他にも最適化アルゴリズムがまとめられておりましたので勉強になるかと思います。
https://qiita.com/tokkuman/items/1944c00415d129ca0ee9
■最後に
今回はKerasの基本的なことをまとめてみました!!
Kerasを用いてKaggle内のコンペを解いてみたいと思います。
上手くできたらブログにまとめたいと思います。
■参考
https://udemy.benesse.co.jp/data-science/ai/keras.html
https://solobochiblog.com/2019/03/328/
https://www.tdi.co.jp/miso/tensorflow-keras-pytorch
https://techblog.gmo-ap.jp/2017/11/09/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E5%85%A5%E9%96%80%E8%80%85%E3%81%8Ckeras%E3%81%A7%E3%83%9E%E3%83%AB%E3%83%81%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%E3%83%91%E3%83%BC%E3%82%BB%E3%83%97%E3%83%88/
https://qiita.com/tokkuman/items/1944c00415d129ca0ee9