Kerasで深層学習を実践する
Pythonで動かして学ぶ機械学習入門 第三回
谷田和章
自己紹介
● 谷田和章 (たにだかずあき)
○ GitHub: slaypni
● ソフトウェアエンジニア (フリーランス&白ヤギコーポレーション )
○ 機械学習, 自然言語処理
○ Web, iOS, Android
● カメリオの機械学習アルゴリズムの開発
2
深層学習のライブラリ (一部)
● 計算グラフを記述
○ Chainer
○ Tensorflow
○ Theano
● 深層学習の構成を記述
○ Caffe
■ 専用ファイルに構成を記述
○ Keras
■ Pythonで構成を記述
■ ThensorflowかTheanoをバックエンドで利用
これからKerasの使いかたを見ていきます 3
※分類は便宜的なものです
深層学習を試す流れ
入力: データと正解ラベル
出力: テストデータの推定ラベル、および評価
実験の手順
1. データを特徴ベクトルに変換 ← (今回の)深層学習では生のベクトルでもOK
2. データを学習用とテスト用に分ける
3. モデルを定義
4. モデルを学習
5. テストデータの正解ラベルを推定
6. 結果を評価
4
モデル定義
5
from keras.layers import Activation, Dense
from keras.models import Sequential
model = Sequential()
model.add(Dense(8, input_dim=4))
model.add(Activation('relu'))
model.add(Dense(3))
model.add(Activation('softmax'))
model.compile(
loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy']
)
...
ReLU
softmax
input
output
Sequential: .add()で層を順に追加
層を設定
損失関数
最適化法
学習
6
# パラメータを最適化
model.fit(
X_train,
Y_train,
nb_epoch=5,
batch_size=32
)
エポック数
ミニバッチのサイズ
X_train: 訓練データ
Y_train: 正解データ
推定
7
# ラベルを推定
y_pred = model.predict_classes(X_test)
# 各ラベルの確率
y_proba = model.predict_classes(X_test)
X_test: テストデータ
評価
X_test: テストデータ
y_test: 正解データ
8
# Accuracy
_, acc = model.evaluate(X_test, Y_test)
実行環境の準備
必要なもの
● anaconda
● keras
○ 未インストールの場合、 pip install kerasで入れられます
手順
1. 以下のリポジトリをクローン
https://github.com/yosukekatada/python_ml_study
2. そのディレクトリでjupyterを実行
9
サンプル: Iris Dataset
20161027_keras/iris.ipynb
内容
● 実験の流れを確認 (データ準備 → モデル定義 → 学習 → 評価 )
● モデルその1: ロジスティック回帰
○ 一層だけのニューラルネットワーク
● モデルその2: 多層パーセプトロン
○ 復数層のニューラルネットワーク
● 使う層
○ Dense(): 全結合
○ Activation(): 活性化関数
○ BatchNormalization(): バッチ正規化 (学習しやすくする)
10
サンプル: MNIST
20161027_keras/mnist.ipynb
モデルを作って実験してみてください
● モデルの良さはaccuracyで評価
● 考えられること
○ 層の数
○ 各層の幅
○ 活性化関数
○ エポック数
○ 最適化法
○ などなど
● Kerasのドキュメント: https://keras.io/ 11
サンプル: CIFAR10
20161027_keras/cifar10.ipynb
内容
● 畳み込み層を利用
○ Convolution2D()
○ 入力チャネル数の行列を受け取り、出力チャネル数の畳み込み行列を出力する
● プーリング層を利用
○ MaxPooling2D()
● CPUでは学習に時間がかかります
12
サンプル: IMDB 映画レビュー感情分類
20161027_keras/imdb.ipynb
内容
● 単語埋め込み層を利用
○ Embedding()
○ 単語をベクトルに変換
● RNN層を利用
○ GRU()
○ ベクトルの系列をベクトルに変換
● CPUでは学習に時間がかかります
13
おまけ: Dockerで実行環境を作る
利点
● 簡単に実行環境が作れる
● プロジェクトごとに環境を分けられる
必要なもの
● GPUドライバがインストール済みのLinuxホスト
● nvidia-docker
○ GPUを触れるDockerコンテナを作れる
実行するには
● nvidia-docker run -it slaypni/keras-gpu bash 14

Kerasで深層学習を実践する