58
第3回 機械学習勉強会 「色々なNNフレームワークを動かしてみよう!」 ~Keras編~ 1 2016/06/27

第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

Embed Size (px)

Citation preview

Page 1: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

第3回 機械学習勉強会 「色々なNNフレームワークを動かしてみよう!」

~Keras編~

1

2016/06/27

Page 2: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

自己紹介

2

•菅井康之     

•株式会社イーグル所属

• AITCクラウドテクノロジー活用部会 サブリーダー

https://www.facebook.com/yasuyuki.sugai

よろしくお願いしまーす ※この資料の内容は、

個人の見解です

※Keras歴1日

Page 3: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

- 本日の流れ -

3

• keras 環境構築編 – AWS上にKerasの動作環境を準備

• keras Tutorial編 – チュートリアルの一つである、MNISTを使ってお試し動作(theanoもTensorFlowも動くよ♪)

• keras 手書き数字分類編 – MNISTのモデルと学習したパラメータを使って手書き数字の画像を分類してみる

Keras枠は30分なので、 超駆け足でいきます!

Page 4: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

ちなみに、本日のNN会にはCaffeが出てきませんが、興味がある方がいらっしゃいましたら、去年のハンズオン資料をご覧くださいませ

4http://www.slideshare.net/yasuyukisugai/deep-learningcaffe

一回やったし、 もういいかな、と思いまして。。

Page 5: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

5

• 一言で言うと、theanoのPythonラッパー • バックエンドでtheanoが動作

• CNNとRNNの両者、および2つの組み合わせに対応 • 近では、バックエンドにTensorFlowも使えるようになり、 同じコードでtheano,TensorFlowで実行可能に!!

• 抽象化、モジュール化することでブロックを組み合わせるように (簡潔に)モデルを構築できる

• そのおかげでバックエンドを切り替えられるけど、モデルのコンパイルがクソ遅い。。。。

モデル周りが直感的で、 NN触ったことある人ならすぐに理解できそう。

Kerasって?

Page 6: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

6

theanoのラッパーにはPylearn2があったけど、kerasに軍配があがった模様

Pylearn2のサイトトップに、いつの間にかKerasが紹介されてる。。(そしてPylearn2開発終了?のお知らせ)

http://deeplearning.net/software/pylearn2/

Page 7: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

7

公式ドキュメントがしっかり作られているので、これを見るだけで大体できるようになるかと思います セットアップ手順もこれを参照すればOK!

http://keras.io/

Page 8: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

keras 環境構築編 - AWSセットアップ -

8

Page 9: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

今日の環境

9

• 時間がないので、学習時間短縮のため、NVIDIAが 提供するAWSのイメージを利用します(cuDNNは入っていないので、若干速い程度です)

• この資料の手順を実施していただければ、他のAmazonLinuxやCentOSなどでも同様に実施可能です

Page 10: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

また、普段は安価にすむようスポットインスタンスを使うのですが、インスタンスの準備ができるまでに時間がかかるのと、需要によっては突然インスタンス落とされるので、今回も通常のインスタンスでやります。

10

何百円かかかります

※一時間辺り、$0.67くらい

Page 11: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

スポットインスタンスを使ってると・・・

11

途中でこれが 発生すると悲しいので・・・

Page 12: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

まずEC2にアクセス

12

Page 13: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

インスタンスを作成していきます

13

Page 14: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

今回はNVIDIAのインスタンスを使用

14

Page 15: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

GPUインスタンスのg2.2xlargeを 選択します

15

Page 16: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

外からアクセスするように、パブリックIPを割り当て

16②

Page 17: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

あとは基本そのままで問題無いはず ですが、カスタマイズしたい箇所が あれば設定変更してください

17

Page 18: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

後に構成を確認して、インスタンスを作成します

18①

Page 19: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

この画面で作成したキーペアは 無くさないよう気をつけてください。。。

19

Page 20: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

作成中。。。

20

※一度もインスタンスを作成した事がないアカウントの場合、 「2時間待て」というエラーが出る事があります(事前の注意事項参照) もし発生してしまった場合は、CPUモードで試していただくことになります

Page 21: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

作成したインスタンスへの SSH接続手順を確認します

21

Page 22: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

コマンドでの接続方法が確認できます (TeraTermなどのツールを使う方は キーペアとドメインを指定してください)

22

※NVIDIAのインスタンスの場合、ユーザ名は「ec2-user」を

指定してください root -> c2-user

Page 23: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

SSHでインスタンスに 接続できましたでしょうか?

23

Page 24: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

keras 環境構築編 - 諸々セットアップ -

24

Page 25: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

コマンド実行時の注意事項

25

• コピペした際に、スペースや改行部分の文字コードが変わって しまう場合があります

– コマンドが無いよ、などのエラーになったらスペースor改行を疑ってください

• ~ はチルダです – /home/ec2-user ディレクトリを指定する際に使用します – 上手くいかない場合は、~ を /home/ec2-user に読み替えて実行してください

• 行頭の$ はプロンプトを意味しています – 実行時には入力しないでください

• 前のスライドの続きでコマンドを実行するため、カレントディレクトリには注意してください

Page 26: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

26

①環境確認• Pythonのバージョンを確認します$ python --versionPython 2.7.10

• CUDAコンパイラのバージョンを確認します※GPUで動かすためで、必須ではないです

$ nvcc --versionnvcc: NVIDIA (R) Cuda compiler driverCopyright (c) 2005-2015 NVIDIA CorporationBuilt on Tue_Aug_11_14:27:32_CDT_2015Cuda compilation tools, release 7.5, V7.5.17

2.7系 or 3系ならOK

7.5系ならOK

Page 27: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

27

②不足ライブラリのインストール• AmazonLinuxだと入っていないものが多いの

で。。。$ sudo yum install gcc gcc-c++ git : (中略) Successfully installed Theano-0.8.2 numpy-1.11.1 scipy-0.17.1 six-1.10.0

• pipも古いので。。。$ sudo pip install --upgrade pip : (中略) Successfully installed pip-8.1.2

※以降、pip2で実行(sudoの場合、PATHが通ってないので/usr/local/bin/pip2)

Page 28: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

28

③theanoインストール• バックエンドとなるtheanoをインストール

numpyとかscipyとかも一緒に入ります

$ sudo /usr/local/bin/pip2 install Theano : (中略) Successfully installed Theano-0.8.2 numpy-1.11.1 scipy-0.17.1 six-1.10.0

• 手順通りだと、以下のテスト実施がありますが時間がとてもかかるので割愛します(テストなのでやらなくてもOK!!)

$ sudo /usr/local/bin/pip2 install nose $ sudo /usr/local/bin/pip2 install nose-parameterized $ nosetests theano

Page 29: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

29

④TensorFlowインストール• バックエンドとなるTensorFlowをインストール

nvcc入ってれば何とか動くけど、kerasではエラーとなるため、今回はCPUで動作します

$ sudo /usr/local/bin/pip2 install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl

• GPUの方はこちら(Require cuDNN)

• CPUの方はこちら $ sudo /usr/local/bin/pip2 install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl : (中略) Successfully installed tensorflow-0.9.0

Page 30: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

30

⑤kerasインストール• keras本体のインストール

$ sudo /usr/local/bin/pip2 install keras : (中略) Successfully installed keras-1.0.4

• sampleなどを本家からダウンロード

$ cd $ git clone https://github.com/fchollet/keras.git : (中略) Checking connectivity... done.

homeディレクトリに入れたいので、念のためcdでhomeへ移動

Page 31: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

31

⑥HDF5インストール• kerasで学習したパラメータはHDF5形式で保存するため、インストール

※必須ではないです。面倒かつ時間がかかるのでやらなくてもOK!

$ cd $ wget http://www.hdfgroup.org/ftp/HDF5/current/src/hdf5-1.8.17.tar.gz $ tar xvfz hdf5-1.8.17.tar.gz $ cd hdf5-1.8.17 $ ./configure prefix=/opt/hdf5; make; sudo make install

Hierarchical Data Format 5の略科学技術計算などの分野で、時系列の大量のデータを記録するときに使用

$ export LIBRARY_PATH=/opt/hdf5/lib:$LIBRARY_PATH $ export LD_LIBRARY_PATH=/opt/hdf5/lib:$LD_LIBRARY_PATH $ export C_INCLUDE_PATH=/opt/hdf5/include:$C_INCLUDE_PATH $ export CPLUS_INCLUDE_PATH=/opt/hdf5/include:$CPLUS_INCLUDE_PATH $ sudo -E /usr/local/bin/pip2 install h5py : (中略) Successfully built h5py

• HDF5本体 (環境に合わせたインストーラもあるけど、面倒なのでソースコンパイル)

• Pythonライブラリ (環境変数設定後)

Page 32: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

32

HDF5に興味がある方は、本家の方で・・・

https://www.hdfgroup.org/HDF5/

Page 33: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

keras Tutorial編 - MNIST -

33

Page 34: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

LeNet MNIST

34

• 手書き数字の認識精度テスト • 28x28ピクセル、70,000枚の画像

• kerasでは、60,000を訓練に使い、10,000をテストで使います

• 今日は色々なNNでMNISTを動かしてみる会です!(再掲)

Page 35: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

35

①mnist実行• とりあえずmnistのサンプルを動かしてみよう!$ cd $ python keras/examples/mnist_cnn.py Using Theano backend.

「Using Theano backend.」という記述から、theanoで動作していることがわかります。時間がかかるので、Ctrl-Cで一回止めちゃいましょう!!

$ export THEANO_FLAGS=device=gpu0,floatX=float32

theanoをGPUモードで動作させたい場合は、以下の環境変数を設定後にサンプルを動作 (GPUデバイスは環境に合わせて)

Using Theano backend. Using gpu device 0: GRID K520 (CNMeM is disabled, cuDNN not available)

NVIDIAはcuDNNが入ってないので、以下のように出力されます

Page 36: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

36

②keras環境ファイル確認• とりあえず動かしたのには理由があり、、

一度実行するとhomeディレクトリに.kerasというディレクトリができています

$ ls -ltra drwxrwxr-x 3 ec2-user ec2-user 4096 6月 27 09:43 .keras

• この中にある、.keras/keras.jsonがバックエンドを切り替えたりする環境ファイルになります

$ ls -ltr .keras -rw-rw-r-- 1 ec2-user ec2-user 109 6月 27 09:43 keras.json drwxrwxr-x 2 ec2-user ec2-user 4096 6月 27 09:43 datasets

Page 37: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

37

③kerasのバックエンドを切り替えてみる• .keras/keras.jsonのbackendを書き換えます

{ "image_dim_ordering": "th", "epsilon": 1e-07, "floatx": "float32", "backend": "theano" }

• Before

• After{ "image_dim_ordering": "th", "epsilon": 1e-07, "floatx": "float32", "backend": "tensorflow" }

Page 38: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

38

④mnist再実行• もう一度mnistのサンプルを動かしてみます

$ cd $ python keras/examples/mnist_cnn.py Using TensorFlow backend.

「Using TensorFlow backend.」という記述から、TensorFlowに切り替わったことがわかります。時間がかかるので、Ctrl-Cで一回止めちゃいましょう!!

Page 39: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

39

⑤mnistの中身を見てみよう• 資料が間に合わなかったので、その場で。。

Page 40: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

40

Using Theano backend. Using gpu device 0: GRID K520 (CNMeM is disabled, cuDNN not available) X_train shape: (60000, 1, 28, 28) 60000 train samples 10000 test samples

Train on 60000 samples, validate on 10000 samples Epoch 1/12 60000/60000 [==============================] - 29s - loss: 0.3823 - acc: 0.8824 - val_loss: 0.1019 - val_acc: 0.9679 Epoch 2/12 60000/60000 [==============================] - 29s - loss: 0.1522 - acc: 0.9558 - val_loss: 0.0683 - val_acc: 0.9791 Epoch 3/12 60000/60000 [==============================] - 29s - loss: 0.1166 - acc: 0.9652 - val_loss: 0.0549 - val_acc: 0.9818 Epoch 4/12 60000/60000 [==============================] - 29s - loss: 0.0992 - acc: 0.9710 - val_loss: 0.0474 - val_acc: 0.9847 Epoch 5/12 60000/60000 [==============================] - 29s - loss: 0.0864 - acc: 0.9753 - val_loss: 0.0452 - val_acc: 0.9852 Epoch 6/12 60000/60000 [==============================] - 29s - loss: 0.0775 - acc: 0.9768 - val_loss: 0.0436 - val_acc: 0.9853 Epoch 7/12 60000/60000 [==============================] - 29s - loss: 0.0672 - acc: 0.9799 - val_loss: 0.0370 - val_acc: 0.9875 Epoch 8/12 60000/60000 [==============================] - 29s - loss: 0.0625 - acc: 0.9811 - val_loss: 0.0364 - val_acc: 0.9880 Epoch 9/12 60000/60000 [==============================] - 29s - loss: 0.0583 - acc: 0.9825 - val_loss: 0.0344 - val_acc: 0.9882 Epoch 10/12 60000/60000 [==============================] - 29s - loss: 0.0549 - acc: 0.9833 - val_loss: 0.0321 - val_acc: 0.9885 Epoch 11/12 60000/60000 [==============================] - 29s - loss: 0.0507 - acc: 0.9846 - val_loss: 0.0330 - val_acc: 0.9886 Epoch 12/12 60000/60000 [==============================] - 29s - loss: 0.0489 - acc: 0.9850 - val_loss: 0.0309 - val_acc: 0.9896 Test score: 0.0308561353186 Test accuracy: 0.9896

Theanoでの実行結果

Page 41: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

41

Using TensorFlow backend. X_train shape: (60000, 1, 28, 28) 60000 train samples 10000 test samples Train on 60000 samples, validate on 10000 samples Epoch 1/12 60000/60000 [==============================] - 194s - loss: 0.3841 - acc: 0.8832 - val_loss: 0.1024 - val_acc: 0.9677 Epoch 2/12 60000/60000 [==============================] - 194s - loss: 0.1525 - acc: 0.9557 - val_loss: 0.0688 - val_acc: 0.9778 Epoch 3/12 60000/60000 [==============================] - 194s - loss: 0.1152 - acc: 0.9660 - val_loss: 0.0537 - val_acc: 0.9825 Epoch 4/12 60000/60000 [==============================] - 194s - loss: 0.0955 - acc: 0.9718 - val_loss: 0.0474 - val_acc: 0.9838 Epoch 5/12 60000/60000 [==============================] - 194s - loss: 0.0833 - acc: 0.9753 - val_loss: 0.0434 - val_acc: 0.9858 Epoch 6/12 60000/60000 [==============================] - 194s - loss: 0.0744 - acc: 0.9781 - val_loss: 0.0417 - val_acc: 0.9859 Epoch 7/12 60000/60000 [==============================] - 194s - loss: 0.0685 - acc: 0.9793 - val_loss: 0.0377 - val_acc: 0.9877 Epoch 8/12 60000/60000 [==============================] - 194s - loss: 0.0635 - acc: 0.9816 - val_loss: 0.0359 - val_acc: 0.9883 Epoch 9/12 60000/60000 [==============================] - 194s - loss: 0.0597 - acc: 0.9822 - val_loss: 0.0331 - val_acc: 0.9888 Epoch 10/12 60000/60000 [==============================] - 194s - loss: 0.0530 - acc: 0.9841 - val_loss: 0.0340 - val_acc: 0.9890 Epoch 11/12 60000/60000 [==============================] - 194s - loss: 0.0521 - acc: 0.9841 - val_loss: 0.0315 - val_acc: 0.9893 Epoch 12/12 60000/60000 [==============================] - 195s - loss: 0.0490 - acc: 0.9849 - val_loss: 0.0325 - val_acc: 0.9892 Test score: 0.0325271734926 Test accuracy: 0.9892

TensorFlowでの実行結果

Page 42: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

42

⑥mnistのモデル/パラメータを保存しよう• せっかく学習したので、(何度も実施して

いられないので)モデルと学習パラメータを保存したい!

• さっきから実施しているサンプルコードを書き換えましょう末尾に以下のコードを追加してください

$ vi keras/examples/mnist_cnn.py

print('save the architecture of a model') json_string = model.to_json() open('cnn_model.json', 'w').write(json_string) yaml_string = model.to_yaml() open('cnn_model.yaml', 'w').write(yaml_string) print('save weights') model.save_weights('cnn_model_weights.hdf5')

Page 43: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

43

⑦モデル/パラメータ保存の補足• モデルはJSON、またはYAML形式で保存可能 • 学習パラメータはHDF5形式で保存

• 再度サンプルを動作させると、 homeディレクトリにファイルが保存される・・はず。

$ cd $ python keras/examples/mnist_cnn.py

Page 44: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

44

⑧せっかくなので、それぞれの速度を・・

• 元々theano用に作られているので、TensorFlow向けのパフォーマンスチューニングはこれからかも?

1Epoch(60,000sample)辺り… theano TensorFlow

NVIDIA instance (no cuDNN)

※g2.2xlarge instance29s (GPU) 194s (CPU)

cuDNN instance※g2.2xlarge instance

10s (GPU) 98s (GPU)

g2.2xlarge instance 1,177s (CPU) 194s (CPU)

t2.micro instance 測定不能 876s (CPU)

Page 45: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

keras 手書き数字分類編 - MNIST -

45

Page 46: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

46

①分類したい・・・よね?• せっかく学習させたので、学習パラメータとモデルを使って、実際に分類したい!

• 先ほど保存したモデルを使って、分類するプログラムを用意しました

$ cd $ vi mnist_classifier.py

コードは次スライドで。。。

Page 47: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

47

from __future__ import print_function import sys import numpy as np np.random.seed(1337) # for reproducibility from keras.layers import Dense, Dropout, Activation, Flatten from keras.layers import Convolution2D, MaxPooling2D from keras.utils import np_utils from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img from keras.models import model_from_json batch_size = 128 nb_classes = 10 nb_epoch = 12 # input image dimensions img_rows, img_cols = 28, 28 # number of convolutional filters to use nb_filters = 32 # size of pooling area for max pooling nb_pool = 2 # convolution kernel size nb_conv = 3 print("-- Read model ---") json_string = open('cnn_model.json').read() model = model_from_json(json_string) model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy']) model.load_weights('cnn_model_weights.hdf5') print(model.summary()) print("-- predict classes --") img = load_img(sys.argv[1], grayscale=True) x = img_to_array(img) x = x.reshape((1,)+x.shape) x /= 255 classes = model.predict(x, batch_size=batch_size, verbose=True) print(classes[0]) print(model.predict_classes(x, batch_size=batch_size))

モデルとパラメータを保存したファイルから読み込んで・・・

分類したい画像を処理できるよう読み込んで・・・

分類!!

Page 48: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

48

• プログラムがうまくコピペできない方向けに、Dropboxにも同じものを置いてあります

• めんどくさい人はこちらでもOKです

pythonの場合、インデントがずれるとエラーになるので、コピペだと難しいかもしれません。。 改行もPDFだと怪しいかも。。 ※元ファイルは消してから実行してください

$ wget https://dl.dropboxusercontent.com/u/8148946/develop/aws/mnist_classifier.py

Page 49: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

49

②分類する画像は・・・?• 私が手書きした画像ファイルを用意しました

Page 50: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

50

• 画像はサイズがマチマチだったり、コントラストが効いてたりで、このまま学習に使うと精度が悪いので正規化していきます

③画像の前処理

$ sudo yum install ImageMagick

• 正規化にはImageMagickを利用しています

Page 51: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

51

④まずは1つ目・・・• 3をダウンロードして試してみます

例の如く、Dropboxから$ wget https://dl.dropboxusercontent.com/u/8148946/develop/aws/hand_three.jpg

$ mogrify -geometry 28x28 hand_three.jpg $ mogrify -equalize hand_three.jpg

• ImageMagickを利用して正規化 • geometry : サイズ変更 28x28px • equalize : 画像のヒストグラム均等化

Page 52: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

52

画像の正規化

equalize

geometry 28x28

• ヒストグラム均等化 • 画像のヒストグラムを均等(平坦)にすることで、 全画像のコントラストが統一され、画像処理しやすくなる(カメラやってる人は詳しいですよね)

Page 53: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

53

⑤分類してみよう• 先ほどのコードにパラメータで

画像ファイルを渡して実行$ python mnist_classifier.py hand_three.jpg

-- predict classes -- 1/1 [==============================] - 0s [ 2.43401244e-10 2.48896811e-07 1.83150478e-05 9.99735653e-01 1.21337429e-09 3.13459373e-06 1.67957495e-10 1.48233937e-07 2.42191425e-04 3.22340981e-07] 1/1 [==============================] - 0s [3]

• ちなみに私の環境の結果・・・0-9であるそれぞれの確率

も高い確率のラベル(上の結果から、99.97…以上の確率で、3である)

Page 54: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

54

⑥その他の画像も・・・

$ wget https://dl.dropboxusercontent.com/u/8148946/develop/aws/hand_eight.jpg $ mogrify -geometry 28x28 hand_eight.jpg $ mogrify -equalize hand_eight.jpg $ python mnist_classifier.py hand_eight.jpg

-- predict classes -- 1/1 [==============================] - 0s [ 8.30656461e-07 3.80646213e-07 2.04700581e-03 2.39168089e-02 6.18481479e-08 2.73143174e-04 9.84432859e-07 5.56953580e-07 9.73759592e-01 5.90186460e-07] 1/1 [==============================] - 0s [8]

• ちなみに私の環境の結果・・・

Page 55: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

55

⑥その他の画像も・・・

$ wget https://dl.dropboxusercontent.com/u/8148946/develop/aws/hand_one.jpg $ mogrify -geometry 28x28 hand_one.jpg $ mogrify -equalize hand_one.jpg $ python mnist_classifier.py hand_one.jpg

-- predict classes -- 1/1 [==============================] - 0s [ 1.70512255e-02 4.73892987e-01 1.40300682e-02 1.17668300e-04 1.29068550e-02 1.12136435e-02 3.36032882e-02 2.87611940e-04 4.36355650e-01 5.41018206e-04] 1/1 [==============================] - 0s [1]

• ちなみに私の環境の結果・・・

Page 56: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

56

⑥その他の画像も・・・

$ wget https://dl.dropboxusercontent.com/u/8148946/develop/aws/hand_four.jpg $ mogrify -geometry 28x28 hand_four.jpg $ mogrify -equalize hand_four.jpg $ python mnist_classifier.py hand_four.jpg

-- predict classes -- 1/1 [==============================] - 0s [ 1.00734840e-04 4.62344708e-03 7.69768953e-02 1.44169380e-05 9.07931030e-01 3.15244615e-05 5.63872652e-03 1.50309980e-03 3.14575201e-03 3.44054097e-05] 1/1 [==============================] - 0s [4]

• ちなみに私の環境の結果・・・

Page 57: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

一通り楽しんだら、インスタンスの後始末

57

停止じゃなくて、削除しないとEBSの課金が続きます。。

Page 58: 第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-

おわり。

58