ここでは、「Keras」を用いた機械学習について解説しています。
この記事の対象
Kerasとは
「Keras」とは「TensorFlow」「Theano」で使える深層学習のラッパーライブラリです。
Kerasを用いることでTensorFlowやTheanoを利用しつつ様々なアルゴリズムで機械学習のプログラムを書くことが可能になります。
Kerasのインストール
PyPIからKerasをインストールする場合
$ sudo pip install keras
pipで簡単にインストールできます。
バックエンド変更方法
以下は、バックエンドの変更方法です。
バックエンドを変更するには設定ファイルをいじる必要があります。(※Windows環境の方は、$HOME を %USERPROFILE%と読み替えて下さい。)
$HOME/.keras/keras.json
上記の設定ファイルが無い場合は、下記の様にしてjsonファイルを作成して下さい。
{
"image_data_format": "channels_last",
"epsilon": 1e-07,
"floatx": "float32",
"backend": "tensorflow"
}
本題のバックエンドの変更は「”backend”」の「”tensorflow”」を「”theano”」「”cntk”」等に書き換えて保存するだけです。
以上がPyPIからインストールした場合の環境構築になります。実はインストールせずとも使える環境も存在しています。Google Colaboratoryというものを使用すればインストール不要で使用可能です。
ちなみにGoogle ColaboratoryはGoogleアカウントがあれば誰でも無料で使用できる「機械学習の教育、研究を目的として開発されたツール」になります。
Kerasを用いた使用例
Kerasを用いた使用例として、以下ではMNISTの手書き数字の分類プログラムを記しています。
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import Adam
from keras.utils import np_utils
#1---MNISTデータの読込
(X_train, y_train), (X_test, y_test) = mnist.load_data()
#2--float32型に変換して正規化
X_train = X_train.reshape(60000, 784).astype('float32')
X_test = X_test.reshape(10000, 784).astype('float32')
X_train /= 255
X_test /= 255
#3---ラベルデータを0~9までの配列に変換
y_train = np_utils.to_categorical(y_train, 10)
y_test = np_utils.to_categorical(y_test, 10)
#4---モデル定義
model = Sequential()
model.add(Dense(512, input_shape=(784,)))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(10))
model.add(Activation('softmax'))
#5---モデル構築
model.compile(
loss='categorical_crossentropy',
optimizer=Adam(),
metrics=['accuracy'])
#6---データ訓練
hist = model.fit(X_train, y_train)
#7---評価
score = model.evaluate(X_test, y_test, verbose=1)
print('loss=', score[0])
print('accuracy=', score[1])
上記がプログラムになります。
それでは解説していきます。
#1---MNISTデータの読込
(X_train, y_train), (X_test, y_test) = mnist.load_data()
1の部分ではMNISTのデータを読み込んでいます。Kerasにはデータセットを自動的にダウンロードされるのでそのデータを読み込んでいます。訓練データ6万件、テストデータ1万件になります。
#2--float32型に変換して正規化
X_train = X_train.reshape(60000, 784).astype('float32')
X_test = X_test.reshape(10000, 784).astype('float32')
X_train /= 255
X_test /= 255
2の部分ではデータをfloat32型に変換して0~1の間で正規化しています。reshapeで指定したshapeにテンソルを整形しています。ピクセルの色の濃さが0~255までの8ビットになっています。
#3---ラベルデータを0~9までの配列に変換
y_train = np_utils.to_categorical(y_train, 10)
y_test = np_utils.to_categorical(y_test, 10)
3の部分では0~9までの10個の数値を10次元に変換しています。np_utils.to_categorical()メソッドは10次元に簡単にラベルを変換できます。
#4---モデル定義
model = Sequential()
model.add(Dense(512, input_shape=(784,)))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(10))
model.add(Activation('softmax'))
4の部分ではモデルを定義しています。「Sequential」(系列)モデルは層を積み重ねたものです。add()メソッドで深層学習の各層(レイヤー)を追加しています。「model.add(Dense(512, input_shape=(784,)))」は通常の全結合ニューラルネットワークレイヤー、「model.add(Activation(‘relu’))」は活性化関数、「model.add(Dropout(0.2))」は訓練時の更新においてランダムに入力ユニットを0とする割合を追加しています。
#5---モデル構築
model.compile(
loss='categorical_crossentropy',
optimizer=Adam(),
metrics=['accuracy'])
5の部分ではcompile()メソッドでモデルを構築しています。引数で「Optimizer(最適化)」「loss(損失関数)」「metrics(評価関数)」を指定できます。ここでは最適化アルゴリズムにAdam、損失関数に交差エントロピー、評価関数に正解率を指定しています。
#6---データ訓練
hist = model.fit(X_train, y_train)
6の部分ではデータを訓練させています。引数には訓練データを指定しています。
#7---評価
score = model.evaluate(X_test, y_test, verbose=1)
print('loss=', score[0])
print('accuracy=', score[1])
最後に評価して、損失と正解を出力しています。evaluateでテストデータを評価しています。verboseは1にすることでプログレスバーにしています。
結果
11493376/11490434 [==============================] - 0s 0us/step
1875/1875 [==============================] - 13s 6ms/step - loss: 0.3577 - accuracy: 0.8888
313/313 [==============================] - 1s 3ms/step - loss: 0.1187 - accuracy: 0.9635
loss= 0.11867276579141617
accuracy= 0.9635000228881836
結果です。0.9635という正解率になりました。
その他、Kerasを用いた使用例
項目 | 内容 |
Under construction . . . | Under construction . . . |