cogbot no9 cntkハンズオン資料
TRANSCRIPT
![Page 1: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/1.jpg)
2017/11/30株式会社ネクストスケープ
上坂貴志Microsoft MVP for Mircosoft Azure
Cogbot勉強会 # 9
Cognitive Toolkit ハンズオン
![Page 2: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/2.jpg)
自己紹介
好きな技術ドメイン駆動設計!アジャイル!深層学習!
株式会社ネクストスケープクラウド事業本部 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 登壇◆他多数
うえさか たかし
![Page 3: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/3.jpg)
AzureMLの入門記事
「ゼロからはじめるAzure」シリーズにて、全4回でAzureML入門記事を執筆中です。現在第1回が公開されております。
是非ご覧ください~
https://news.mynavi.jp/article/zeroazure-10/
![Page 4: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/4.jpg)
Azureもくもく新宿
Conpassで「Azureもくもく会@新宿」と検索してください!
AIをもくもくする日です。• AzureML• Cognitive Services• CNTKなどなど
![Page 5: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/5.jpg)
環境作成
![Page 6: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/6.jpg)
環境作成
• Azure Notebooksを使用する場合1. Azure Notebooksにアクセスしてログインしておきます。
• https://notebooks.azure.com
2. 次のいずれかのリンクをブラウザで開きます。• https://notebooks.azure.com/nsuesaka/libraries/cogbot-no9
• https://goo.gl/TDTPtB
3. Cloneをクリックすると、自分の環境へコピーされます。
![Page 7: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/7.jpg)
環境作成
• DataScienceVMを使用する場合1. 次のいずれかのリンクをブラウザで開きます。
• https://notebooks.azure.com/nsuesaka/libraries/cogbot-no9
• https://goo.gl/TDTPtB
2. ファイルをクリック→右クリック→ダウンロードでファイルを1つずつ全てダウンロードします。
![Page 8: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/8.jpg)
1.CNTK MNIST by DNN
![Page 9: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/9.jpg)
1.CNTK MNIST by DNN
• MNISTを全結合のニューラルネットワークで分類します。
• CNTK独自の実装を極力行わず、他のFrameworkに慣れた人にとって親和性が高い実装方法です。(Trainerを使用していない)
![Page 10: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/10.jpg)
1.CNTK MNIST by DNN
Scikit-learnのライブラリを使用して、MNISTをDownload
0~255の数値を0~1に正規化
トレーニングとTestにデータを分割
ラベルの数値0~9をint型に変換
![Page 11: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/11.jpg)
1.CNTK MNIST by DNN
乱数のシード値を固定して、毎回同じ乱数を発生させる
発生した乱数値に合わせてトレーニングとラベルを並べ替え
![Page 12: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/12.jpg)
1.CNTK MNIST by DNN
ラベル値0~9をone-hot表現に変換例:3は0001000000になる
Denseは全結合のニューラルネットワーク層のこと。最後の層のニューロンが10個なのは、ラベルが0~9で10個だから
Cognitive Toolkitでは、モデル定義はこのSequentialを使用して層を上から順に書いていく
最後の層はActivationをNoneにすることに注意。Softmaxはここで指定しない
![Page 13: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/13.jpg)
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を指定した
![Page 14: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/14.jpg)
1.CNTK MNIST by DNN
すいません、epoch_sizeの方が適切な変数名でした。1epoch内に含まれるトレーニングデータの数です
学習率をここで決めています
ミニバッチのサイズです。32にしています
オプティマイザです。SGDやadagladなどがありますが、個人的に最初はAdamから試行するのでAdamにしてあります
![Page 15: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/15.jpg)
1.CNTK MNIST by DNNログ出力オブジェクトです。300にすると、ミニバッチ数32*300= 9600データ学習した時点でログを出力します
トレーニング実施です
学習済みモデルに対して、テストを実施してどれぐらい一般化できているかを確認します
![Page 16: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/16.jpg)
2.CNTK MNIST by DNN with Trainer
![Page 17: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/17.jpg)
2.CNTK MNIST by DNN with Trainer
•「1.CNTK MNIST by DNN」を、Trainerというオブジェクトを使用してトレーニングする方法に実装を変更しています。
• Trainerを使用すると、Early Stoppingや、学習率の動的な更新など細かい対応が可能です。(このハンズオンではそこまで実装していません)
•「1.CNTK MNIST by DNN」との違いだけを解説します。
![Page 18: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/18.jpg)
2.CNTK MNIST by DNN with Trainer
@cntk.Functionデコレータを使ったPython関数がなくなった。トレーニングはTrainerでこの後に実装するため。ここではTrainerに渡すためにモデルz、損失関数loss、評価エラーmetricを個別に宣言している
![Page 19: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/19.jpg)
2.CNTK MNIST by DNN with Trainer
入出力のVariableであるx, yに対応したディクショナリでトレーニングとラベルデータを宣言し、それを渡して学習を実行
Trainerオブジェクトの生成
1epoch終わるたびにデータをシャッフル
ミニバッチサイズにデータを切り出し
すいません、これ要らないです
![Page 20: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/20.jpg)
2.CNTK MNIST by DNN with Trainer
学習済みのモデルはtrainerが持っている。test_minibatchメソッドにテスト用データを渡して一般化を評価している
![Page 21: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/21.jpg)
3.CNTK MNIST by CNN
![Page 22: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/22.jpg)
3.CNTK MNIST by CNN
•いよいよ深層学習です。CNNを実装します。
•「2. CNTK MNIST by DNN with Trainer 」を、CNNを使用するように変更します。
•「 2. CNTK MNIST by DNN with Trainer 」との違いだけを解説します。
![Page 23: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/23.jpg)
3.CNTK MNIST by CNN
CNN対応の一番のポイントはここ。Trainerはミニバッチでデータを受け取るので、4次元の行列を入力にしなければならない。
CNTKでは、画像の形式を(チャンネル数, Height , Width)として扱う。
![Page 24: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/24.jpg)
3.CNTK MNIST by CNN
このdefault_optionsでは、Sequential内の各Layerのデフォルトパラメータを設定しておく
Filterのサイズが5x5でフィルター数が32です。Activationの記載がないのでデフォルトのreluになる。Padも記載がないため、デフォルトのTrueとなる
![Page 25: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/25.jpg)
4.Change MNIST to Image Reader Format
![Page 26: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/26.jpg)
4.Change MNIST to Image Reader Format
•これまではMNISTを全量メモリに読み込んでいました。
•でも、現実のデータ量はもっと大きく、大量なのでメモリに全量読み込むことはできません。
• CNTKはこのシナリオに対応したReaderクラスを用意しています。
1. CTFReader(Textファイル用)2. CTBReader(バイナリファイル用)3. ImageReader(画像ファイル用)
•ここではImageReader用にMNISTを加工してファイルに出力し、次の5でImgareReaderを使用するCNNを実装します。
•解説はJupyter Notebookに記載してあります。
![Page 27: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/27.jpg)
5.CNTK MNIST by CNN with Image Reader
![Page 28: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/28.jpg)
5.CNTK MNIST by CNN with Image Reader
• ImageReaderは、他の深層学習用Frameworkのデータリーダーと同様に入力画像を少しだけ加工してデータを水増しする機能があります。
•この実装例ではMNIST画像をランダム縮小する加工を行っています。
•そのため、入力数に上限はありません。ImageReaderを呼べばそのたびに加工された画像を取得可能です。(やりすぎると過学習します)
•インプットのバリエーションが増えるため、CNNモデルの層が貧弱だとMNISTにも関わらず認識率が良くありません。(この例では良くない)
![Page 29: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/29.jpg)
5.CNTK MNIST by CNN with Image Reader
ランダムに縮小しつつ、jitterによって画像に乱れ(ぼかした感じ)を追加する設定
train_map.txtを読み込んで、対象となる画像とラベルを読むDeserializerを作成トレーニング画像用のリーダーを作成
![Page 30: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/30.jpg)
5.CNTK MNIST by CNN with Image Reader
テスト画像用のリーダーを作成
test_map.txtを読み込んで、対象となる画像とラベルを読むDeserializerを作成
![Page 31: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/31.jpg)
5.CNTK MNIST by CNN with Image Reader
入力値0~255を0~1に正規化
![Page 32: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/32.jpg)
5.CNTK MNIST by CNN with Image Reader
ImageReaderで指定した入力と、モデルに設定した入出力のVariableをマッピング
リーダーからミニバッチサイズのデータを受け取る
リーダーを引数に、トレーニング実行
![Page 33: Cogbot no9 CNTKハンズオン資料](https://reader033.vdocuments.site/reader033/viewer/2022051318/5a647ee77f8b9a82568b47db/html5/thumbnails/33.jpg)
5.CNTK MNIST by CNN with Image Reader
テストデータ用のリーダーからデータを受け取る
評価の実行結果はミニバッチ単位の平均評価エラー。それにミニバッチ数を掛けて、エラー数を求める。それを累計する
総平均エラー率を算出
これ、何をしているかわかりますか?端数計算です