ディープラーニングの入り口、Kerasを張り倒す
ってことでディープラーニングの世界に触れてみる
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だとすっきりして分かりやすい。
ちょっとわくわくしてくる(;゚д゚)ゴクリ…
詳しい中身はまた今度分析してみる