Cogbot no9 CNTKハンズオン資料

Post on 21-Jan-2018

658 Views

Category:

Engineering

2 Downloads

Preview:

Click to see full reader

Transcript

2017/11/30株式会社ネクストスケープ

上坂貴志Microsoft MVP for Mircosoft Azure

Cogbot勉強会 # 9

Cognitive Toolkit ハンズオン

自己紹介

好きな技術ドメイン駆動設計!アジャイル!深層学習!

株式会社ネクストスケープクラウド事業本部 C&T部 部長

エバンジェリスト / ITアーキテクト / CSA上坂 貴志

Microsoft MVP for Microsoft Azure

Scrum(認定スクラムマスター)

2017年 ◆ Cogbotコミュニティ登壇

2016年 ◆ Schooドメイン駆動設計入門出演◆ UMTP モデリングフォーラム2016 登壇◆QCon Tokyo 2016 DDD実践報告◆de:code 2016 登壇◆NS Study No.6 Azure IoTHub紹介登壇◆アプレッソ Azure MLセミナー登壇◆SANSAN DDD勉強会発表

2015年 ◆FEST2015 (Channel9で動画公開)◆Developers Summit 2015◆QCon Tokyo 2015◆de:code 2015 登壇◆他多数

うえさか たかし

AzureMLの入門記事

「ゼロからはじめるAzure」シリーズにて、全4回でAzureML入門記事を執筆中です。現在第1回が公開されております。

是非ご覧ください~

https://news.mynavi.jp/article/zeroazure-10/

Azureもくもく新宿

Conpassで「Azureもくもく会@新宿」と検索してください!

AIをもくもくする日です。• AzureML• Cognitive Services• CNTKなどなど

環境作成

環境作成

• Azure Notebooksを使用する場合1. Azure Notebooksにアクセスしてログインしておきます。

• https://notebooks.azure.com

2. 次のいずれかのリンクをブラウザで開きます。• https://notebooks.azure.com/nsuesaka/libraries/cogbot-no9

• https://goo.gl/TDTPtB

3. Cloneをクリックすると、自分の環境へコピーされます。

環境作成

• DataScienceVMを使用する場合1. 次のいずれかのリンクをブラウザで開きます。

• https://notebooks.azure.com/nsuesaka/libraries/cogbot-no9

• https://goo.gl/TDTPtB

2. ファイルをクリック→右クリック→ダウンロードでファイルを1つずつ全てダウンロードします。

1.CNTK MNIST by DNN

1.CNTK MNIST by DNN

• MNISTを全結合のニューラルネットワークで分類します。

• CNTK独自の実装を極力行わず、他のFrameworkに慣れた人にとって親和性が高い実装方法です。(Trainerを使用していない)

1.CNTK MNIST by DNN

Scikit-learnのライブラリを使用して、MNISTをDownload

0~255の数値を0~1に正規化

トレーニングとTestにデータを分割

ラベルの数値0~9をint型に変換

1.CNTK MNIST by DNN

乱数のシード値を固定して、毎回同じ乱数を発生させる

発生した乱数値に合わせてトレーニングとラベルを並べ替え

1.CNTK MNIST by DNN

ラベル値0~9をone-hot表現に変換例:3は0001000000になる

Denseは全結合のニューラルネットワーク層のこと。最後の層のニューロンが10個なのは、ラベルが0~9で10個だから

Cognitive Toolkitでは、モデル定義はこのSequentialを使用して層を上から順に書いていく

最後の層はActivationをNoneにすることに注意。Softmaxはここで指定しない

1.CNTK MNIST by DNN

直前で定義したモデル(model_mn)に対して、損失関数交差エントロピーと、クラス分類エラーを設定するpython関数

@cntk.Functionデコレータによって、python関数がcntkのFunctionオブジェクトに変換される。ここで作ったFunctionオブジェクトが学習モデルである。(trainメソッドを持つ)

@cntk.Functionデコレータによって、python関数がcntkのFunctionオブジェクトに変換される。直上で宣言したVariableオブジェクトを引数にとっていることに注目

学習モデルの入出力を表すVariableオブジェクトを宣言

Softmaxの結果に対する交差エントロピー。だからモデル作成の最後の層のactivationはNoneを指定した

1.CNTK MNIST by DNN

すいません、epoch_sizeの方が適切な変数名でした。1epoch内に含まれるトレーニングデータの数です

学習率をここで決めています

ミニバッチのサイズです。32にしています

オプティマイザです。SGDやadagladなどがありますが、個人的に最初はAdamから試行するのでAdamにしてあります

1.CNTK MNIST by DNNログ出力オブジェクトです。300にすると、ミニバッチ数32*300= 9600データ学習した時点でログを出力します

トレーニング実施です

学習済みモデルに対して、テストを実施してどれぐらい一般化できているかを確認します

2.CNTK MNIST by DNN with Trainer

2.CNTK MNIST by DNN with Trainer

•「1.CNTK MNIST by DNN」を、Trainerというオブジェクトを使用してトレーニングする方法に実装を変更しています。

• Trainerを使用すると、Early Stoppingや、学習率の動的な更新など細かい対応が可能です。(このハンズオンではそこまで実装していません)

•「1.CNTK MNIST by DNN」との違いだけを解説します。

2.CNTK MNIST by DNN with Trainer

@cntk.Functionデコレータを使ったPython関数がなくなった。トレーニングはTrainerでこの後に実装するため。ここではTrainerに渡すためにモデルz、損失関数loss、評価エラーmetricを個別に宣言している

2.CNTK MNIST by DNN with Trainer

入出力のVariableであるx, yに対応したディクショナリでトレーニングとラベルデータを宣言し、それを渡して学習を実行

Trainerオブジェクトの生成

1epoch終わるたびにデータをシャッフル

ミニバッチサイズにデータを切り出し

すいません、これ要らないです

2.CNTK MNIST by DNN with Trainer

学習済みのモデルはtrainerが持っている。test_minibatchメソッドにテスト用データを渡して一般化を評価している

3.CNTK MNIST by CNN

3.CNTK MNIST by CNN

•いよいよ深層学習です。CNNを実装します。

•「2. CNTK MNIST by DNN with Trainer 」を、CNNを使用するように変更します。

•「 2. CNTK MNIST by DNN with Trainer 」との違いだけを解説します。

3.CNTK MNIST by CNN

CNN対応の一番のポイントはここ。Trainerはミニバッチでデータを受け取るので、4次元の行列を入力にしなければならない。

CNTKでは、画像の形式を(チャンネル数, Height , Width)として扱う。

3.CNTK MNIST by CNN

このdefault_optionsでは、Sequential内の各Layerのデフォルトパラメータを設定しておく

Filterのサイズが5x5でフィルター数が32です。Activationの記載がないのでデフォルトのreluになる。Padも記載がないため、デフォルトのTrueとなる

4.Change MNIST to Image Reader Format

4.Change MNIST to Image Reader Format

•これまではMNISTを全量メモリに読み込んでいました。

•でも、現実のデータ量はもっと大きく、大量なのでメモリに全量読み込むことはできません。

• CNTKはこのシナリオに対応したReaderクラスを用意しています。

1. CTFReader(Textファイル用)2. CTBReader(バイナリファイル用)3. ImageReader(画像ファイル用)

•ここではImageReader用にMNISTを加工してファイルに出力し、次の5でImgareReaderを使用するCNNを実装します。

•解説はJupyter Notebookに記載してあります。

5.CNTK MNIST by CNN with Image Reader

5.CNTK MNIST by CNN with Image Reader

• ImageReaderは、他の深層学習用Frameworkのデータリーダーと同様に入力画像を少しだけ加工してデータを水増しする機能があります。

•この実装例ではMNIST画像をランダム縮小する加工を行っています。

•そのため、入力数に上限はありません。ImageReaderを呼べばそのたびに加工された画像を取得可能です。(やりすぎると過学習します)

•インプットのバリエーションが増えるため、CNNモデルの層が貧弱だとMNISTにも関わらず認識率が良くありません。(この例では良くない)

5.CNTK MNIST by CNN with Image Reader

ランダムに縮小しつつ、jitterによって画像に乱れ(ぼかした感じ)を追加する設定

train_map.txtを読み込んで、対象となる画像とラベルを読むDeserializerを作成トレーニング画像用のリーダーを作成

5.CNTK MNIST by CNN with Image Reader

テスト画像用のリーダーを作成

test_map.txtを読み込んで、対象となる画像とラベルを読むDeserializerを作成

5.CNTK MNIST by CNN with Image Reader

入力値0~255を0~1に正規化

5.CNTK MNIST by CNN with Image Reader

ImageReaderで指定した入力と、モデルに設定した入出力のVariableをマッピング

リーダーからミニバッチサイズのデータを受け取る

リーダーを引数に、トレーニング実行

5.CNTK MNIST by CNN with Image Reader

テストデータ用のリーダーからデータを受け取る

評価の実行結果はミニバッチ単位の平均評価エラー。それにミニバッチ数を掛けて、エラー数を求める。それを累計する

総平均エラー率を算出

これ、何をしているかわかりますか?端数計算です

top related