Contenu connexe
Similaire à 2018年01月27日 Keras/TesorFlowによるディープラーニング事始め (20)
2018年01月27日 Keras/TesorFlowによるディープラーニング事始め
- 1. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
Keras/TesorFlowによる
ディープラーニング事始め
2018年1月27日
TensorFlow勉強会シリーズ2 成果報告会
野田 洋之 (個人会員)
- 2. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
Kerasとは
• 高水準のニューラルネットワークライブラリ
– 迅速に、シンプルに、ニューラルネットが実装できる
• バックエンドとして TensorFlow をサポート
• 日本語のドキュメントが整備されている
2
Keras Documentation (https://keras.io/ja/)
- 3. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
今回やったこと
Keras により手書き文字データセット MINIST の学習、および
予測を実行。モデルはシンプルな全結合3層のネットワーク。
• ベースは Keras examples directory のサンプル
mnist_mlp.py
• ベースに対し次の点を変更
➢訓練データとテスト用データの構成を変更
➢TensorBoard用のコールバックを追加
➢学習済みモデルにより予測をするコードを追加
3
- 4. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
MNISTとは
28x28ピクセル、グレースケールの手書き数字のデータセット。
訓練データ6万枚、テストデータ1万枚。
機械学習の実験用データとして使われることが多い。
個々のデータは入力データ(画像データ)と教師データ
(正解データ)のペアで与えられている。
4
入力データ
(画像データ)
教師データ
正解データ
6 2 4 3 4 1 0 6
- 5. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
訓練データの分割
今回、学習済みモデルでの予測をするため、学習には
MNISTの訓練データを8:2に分割して使用。
5
訓練データ
(60,000枚)
テストデータ
(10,000枚)
テストデータ (test data)
(10,000枚)
訓練データ (training data)
(48,000枚)
検証データ (validation data)
(12,000枚)
学習に使用
学習済みモデルによる
予測に使用
- 6. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
環境&インストール
環境
OS : Ubuntu 16.04 LTS (X64)
Python : 3.5.4 (pyenv-virtualenv)
TensorFlow : 1.4.1
Keras : 2.1.3
インストール
pyenv-virtualenv 環境から pip でインストール。
• Keras/TensorFlow 関連のパッケージ
6
> pip install keras tensorflow jupyter
• その他のパッケージ。
> pip install jupyter pandas matplotlib sklearn pydot
- 7. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
モデル
7
モデル
ディープラーニングでは、ニューラルネットワークのこと。
➢ ハイパーパラメータ
学習で決定できないパラメータ。
• モデルの層の数、活性化関数などモデルの構造に関わる
パラメータ
• ドロップアウトの割合、学習率など、学習の際のパラメータ
➢ パラメータ
学習で決定するパラメータ。バイアス、重みなど。
- 8. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
学習と予測
8
学習
訓練データと教師データのペアを入力として、最適化アルゴ
リズムにより、損失が最小となるモデルのパラメータを決定
する。損失は、訓練データをモデルに入力し得られた出力と
教師データとの差で、損失関数で計算する。
予測
回帰や分類において、学習済みモデルにデータを入力し、
予測値を得ること。
- 9. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
エポックとバッチサイズ
エポック
全訓練データを1回学習に用いると1エポック。
学習のエポック数が6の場合、全訓練データを用いた学習を
6回繰り返す。
バッチサイズ
学習の際、訓練データからバッチサイズ数のデータを無作為
に抜き出し、最適化アルゴリズムによりパラメータを更新する
(ミニバッチ学習)。訓練データが48,000個、バッチサイズが
100の場合、1エポックで480回ミニバッチ学習を実行する。
9
- 10. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
AND回路, OR回路
10
𝑥1 𝑥2 𝑦
0 0 0
1 0 0
0 1 0
1 1 1
𝑥1
𝑥2
𝑦
𝑥1
𝑥2
𝑦
𝑥1 𝑥2 𝑦
0 0 0
1 0 0
0 1 0
1 1 1
- 11. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
AND回路、OR回路のモデル
AND回路、OR回路は1層のモデルで学習できる。
11
model = Sequential()
model.add(Dense(units=1,
activation='sigmoid',
input_shape=(2,)))
𝑦 = ℎ 𝑏 + 𝑤1 𝑥1 + 𝑤2 𝑥2
𝑤 : 重み
𝑏 : バイアス
ℎ() : 活性化関数
𝑥1
1
𝑥2
𝑦1
𝑤1
𝑤2
𝑏
入力の形状
出力の形状
活性化関数
通常の全結合ニューラル
ネットワークレイヤー
入力層 出力層
○ はノード,ニューロン
- 12. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
ExOR回路
ExOR回路はAND回路とOR回路で実現できる。
12
𝑥1
𝑥2
𝑦
𝑥1 𝑥2 𝑦
0 0 0
1 0 1
0 1 1
1 1 0
- 13. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
ExOR回路のモデル
ExOR回路は2層のモデルで学習できる。
13
model = Sequential()
model.add(Dense(units=2,
activation='relu’,
input_shape=(2,)))
model.add(Dense(units=1,
activation='sigmoid’))
𝑥21
1
𝑥22
𝑦1
𝑤12
(1)
𝑥11
1
𝑥12
𝑤11
(1)
𝑤22
(1)
𝑤21
(1)
𝑏1
(1)
𝑏2
(1)
𝑏1
(2)
𝑤11
(2)
𝑤12
(2)
入力層 出力層中間層
(隠れ層)
- 14. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
MNISTサンプルプログラムのモデル
KerasのMNISTサンプルプログラム (mnist_mlp.py) のモデル。
シンプルな全結合3層のネットワーク。
14
model = Sequential()
model.add(Dense(512, activation='relu', input_shape=(28*28,)))
model.add(Dropout(0.2))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(num_classes, activation='softmax'))
- 15. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
ドロップアウト
ドロップアウトは、学習の際、一定割合で使用しないノードを
設定することで、予測に寄与しないノードが発生するのを
抑止する。ミニバッチごとに設定される。
15
- 16. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
活性化関数
ノードの入力の総和を変換する関数。
• 非線形関数であること
• 微分可能であること
16
適用 種類 関数名 説明
中間層 ReLU関数 relu ℎ(𝑥) = max 0, 𝑥 = ቊ
0 (𝑥 < 0)
𝑥 (𝑥 ≥ 0)
出力層
回帰 恒等関数 linear ℎ(𝑥) = 𝑥 線形分類器。
分類
(2値変数)
シグモイド
関数
sigmoid
出力は0から1.0の間の実数。
確率変数の出力に利用。
分類
(多値変数)
ソフトマックス
関数
softmax
出力は0から1.0の間の実数。
出力の総和は1。
ソフトマックス関数の出力は確率と解
釈できる。
上記以外にも様々な活性化関数が用意されている。
活性化関数 - Keras Documentation
- 17. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
損失関数
モデルの出力と教師データ(正解データ)との差を計算する
関数。モデルをコンパイルする際に指定する。
17
適用 種類 関数名 説明
回帰 2乗和誤差 mean_squared_error
分類
(2値変数)
交差エントロピー
誤差
binary_crossentropy
分類
(多値変数)
交差エントロピー
誤差
categorical_crossentropy
上記以外にも様々な損失関数が用意されている。
損失関数 - Keras Documentation
- 18. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
最適化アルゴリズム
ミニバッチ学習の際、最適なパラメータを計算するための
アルゴリズム。モデルをコンパイルする際に指定する。
Keras で利用可能な最適化アルゴリズムは
最適化 - Keras Documentation を参照。
学習率など、いくつかのハイパーパラメータは、最適化アルゴリズムから
設定できる。
学習率
学習の際、どれくらいパラメータを更新するか、調整するハイパー
パラメータ。大きすぎると発散し、小さすぎると学習が進まない。
18
- 19. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
分類(多値変数)のお約束
分類(多値変数)の予測モデルを構築する際(損失関数として
categorical_crossentropy を使用する際)、お約束がある。
モデルの出力
モデルの出力は教師データのカテゴリ数とする。
MNISTの場合、0~9の10カテゴリなので、10次元とする。
教師データ
教師データを、次元がカテゴリ数のone-hot表現に変換する。one-hot表現
は、カテゴリに対応する次元が1、それ以外が0のベクトル。Kerasでは
keras.utils.to_categorical 関数で、カテゴリカル変数をone-hot表現に変換で
きる。
19
損失関数 - Keras Documentation より抜粋
- 20. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
TensorBoardログ出力
コールバックにより、TensorBoardのログの出力ができる。
コールバックに登録した関数は学習の際に実行される。
20
tb_cb = keras.callbacks.TensorBoard(log_dir=tb_log_dir, histogram_freq=1)
cbks = [tb_cb]
keras.callbacks.TensorBoard メソッドのインスタンスを取得。
log_dir : ログの出力先
histogram_freq : モデルの層の活性化ヒストグラムを計算する(エポック中の)頻度
history = model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
callbacks=cbks,
verbose=1,
validation_data=(x_target, y_target))
学習を実行する際、オプションにコールバックのインスタンスを指定。
- 21. Copyright © 2018 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.
TensorBoardログ出力
学習完了後、 tensorboard コマンドを実行。ブラウザで
TensorBoard サーバー(デフォルトはポート6006)にアクセス。
21
> tensorboard --logdir [tensorboard_log_dir]