Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Cogbot no9 CNTKハンズオン資料

922 views

Published on

2017/11/30に開催したCogbot勉強会で実施したCNTKハンズオンの資料です。

Published in: Engineering
  • Be the first to comment

Cogbot no9 CNTKハンズオン資料

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

×