ディープラーニングの入り口、Kerasを張り倒す

統計学の勉強に疲れたので、Pythonに立ち返る。

ってことでディープラーニングの世界に触れてみる

Kerasって何ってそこの人のために↓
dev.classmethod.jp
employment.en-japan.com
qiita.com

Kerasのインストール~TensorFlowのバックエンドの設定

# Kerasのインストール
$ pip3 install keras==2.0.5
# nanoエディタをインストール
$ apt-get install nano
# ファイルの記述の準備
$ mkdir ~/.keras
$ nano ~/.keras/keras.json

# TensorFlowをバックエンドで実行するため設定ファイルを記述
{
    "image_dim_ordering":"tf"
    "epsilon":1e-07,
    "floatx":"float32",
    "backend":"tensorflow"
}

# 記述後Ctrl+Xで保存を選択してnanoを閉じる

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

# MNISTのデータを読み込む
(X_train, y_train), (X_test, y_test) = mnist.load_data()

# データを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
# ラベルデータを0-9までのカテゴリを表す配列に変換
y_train = np_utils.to_categorical(y_train, 10)
y_test  = np_utils.to_categorical(y_test, 10)

# モデルの構造を定義
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'))

# モデルを構築
model.compile(
    loss='categorical_crossentropy',
    optimizer=Adam(),
    metrics=['accuracy'])


# データで訓練
hist = model.fit(X_train, y_train)

# テストデータを用いて評価する
score = model.evaluate(X_test, y_test, verbose=1)
print('loss=', score[0])
print('accuracy=', score[1])

結果…

60000/60000 [==============================] - 16s - loss: 0.2217 - acc: 0.9325
Epoch 2/10
60000/60000 [==============================] - 16s - loss: 0.1117 - acc: 0.9656
Epoch 3/10
60000/60000 [==============================] - 16s - loss: 0.0877 - acc: 0.9734
Epoch 4/10
60000/60000 [==============================] - 17s - loss: 0.0714 - acc: 0.9778
Epoch 5/10
60000/60000 [==============================] - 17s - loss: 0.0623 - acc: 0.9816
Epoch 6/10
60000/60000 [==============================] - 17s - loss: 0.0576 - acc: 0.9820
Epoch 7/10
60000/60000 [==============================] - 17s - loss: 0.0580 - acc: 0.9831
Epoch 8/10
60000/60000 [==============================] - 17s - loss: 0.0469 - acc: 0.9864
Epoch 9/10
60000/60000 [==============================] - 17s - loss: 0.0486 - acc: 0.9861
Epoch 10/10
60000/60000 [==============================] - 19s - loss: 0.0466 - acc: 0.9866
 9728/10000 [============================>.] - ETA: 0sloss= 0.09370438802893359
accuracy= 0.9782

サンプルコードを手打ちしたので疲れる…
訓練データとテストデータ合わせて約7万件のデータを処理するので割と時間がかかる…
正答率は97.82%という。
ディープラーニングのサンプルといえばMNISTだけども、実務ではどのくらいのデータ量を処理するのか…

今回何より勉強になるのが、TensorFlowをバックエンドで動かすところ。

TensorFlow単一で書くとより複雑で何やっているか分かりにくいが、Kerasだとすっきりして分かりやすい。

ちょっとわくわくしてくる(;゚д゚)ゴクリ…

詳しい中身はまた今度分析してみる