SlideShare a Scribd company logo
1 of 33
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
テストデータ用のリーダーか
らデータを受け取る
評価の実行結果はミニバッチ
単位の平均評価エラー。
それにミニバッチ数を掛けて、
エラー数を求める。
それを累計する
総平均エラー率を算出
これ、何をしているかわかり
ますか?端数計算です

More Related Content

More from 貴志 上坂

Ns study Azure IoTHub紹介
Ns study Azure IoTHub紹介Ns study Azure IoTHub紹介
Ns study Azure IoTHub紹介貴志 上坂
 
アルゴリズムから学ぶAzure mlモジュールの使いこなし方 hd-insight編-
アルゴリズムから学ぶAzure mlモジュールの使いこなし方 hd-insight編-アルゴリズムから学ぶAzure mlモジュールの使いこなし方 hd-insight編-
アルゴリズムから学ぶAzure mlモジュールの使いこなし方 hd-insight編-貴志 上坂
 
Azure Machine Learningによるレコメンデーションの設計&実装を公開!~朝日カルチャーセンターの事例から~
Azure Machine Learningによるレコメンデーションの設計&実装を公開!~朝日カルチャーセンターの事例から~Azure Machine Learningによるレコメンデーションの設計&実装を公開!~朝日カルチャーセンターの事例から~
Azure Machine Learningによるレコメンデーションの設計&実装を公開!~朝日カルチャーセンターの事例から~貴志 上坂
 
20150421 QCon Tokyo 2015 Azureが切り開く新時代のソフトウェア開発・設計
20150421 QCon Tokyo 2015 Azureが切り開く新時代のソフトウェア開発・設計20150421 QCon Tokyo 2015 Azureが切り開く新時代のソフトウェア開発・設計
20150421 QCon Tokyo 2015 Azureが切り開く新時代のソフトウェア開発・設計貴志 上坂
 
クラウドデザインパターンのススメ
クラウドデザインパターンのススメクラウドデザインパターンのススメ
クラウドデザインパターンのススメ貴志 上坂
 
クラウドデザインパターンから始めるクラウドの利点と弱点の理解~提案から設計・開発・保守に活かす!~
クラウドデザインパターンから始めるクラウドの利点と弱点の理解~提案から設計・開発・保守に活かす!~クラウドデザインパターンから始めるクラウドの利点と弱点の理解~提案から設計・開発・保守に活かす!~
クラウドデザインパターンから始めるクラウドの利点と弱点の理解~提案から設計・開発・保守に活かす!~貴志 上坂
 
Enterprise cloud design pattern 大量データ処理アーキテクチャの構築
Enterprise cloud design pattern 大量データ処理アーキテクチャの構築Enterprise cloud design pattern 大量データ処理アーキテクチャの構築
Enterprise cloud design pattern 大量データ処理アーキテクチャの構築貴志 上坂
 
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsiderMoq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider貴志 上坂
 

More from 貴志 上坂 (8)

Ns study Azure IoTHub紹介
Ns study Azure IoTHub紹介Ns study Azure IoTHub紹介
Ns study Azure IoTHub紹介
 
アルゴリズムから学ぶAzure mlモジュールの使いこなし方 hd-insight編-
アルゴリズムから学ぶAzure mlモジュールの使いこなし方 hd-insight編-アルゴリズムから学ぶAzure mlモジュールの使いこなし方 hd-insight編-
アルゴリズムから学ぶAzure mlモジュールの使いこなし方 hd-insight編-
 
Azure Machine Learningによるレコメンデーションの設計&実装を公開!~朝日カルチャーセンターの事例から~
Azure Machine Learningによるレコメンデーションの設計&実装を公開!~朝日カルチャーセンターの事例から~Azure Machine Learningによるレコメンデーションの設計&実装を公開!~朝日カルチャーセンターの事例から~
Azure Machine Learningによるレコメンデーションの設計&実装を公開!~朝日カルチャーセンターの事例から~
 
20150421 QCon Tokyo 2015 Azureが切り開く新時代のソフトウェア開発・設計
20150421 QCon Tokyo 2015 Azureが切り開く新時代のソフトウェア開発・設計20150421 QCon Tokyo 2015 Azureが切り開く新時代のソフトウェア開発・設計
20150421 QCon Tokyo 2015 Azureが切り開く新時代のソフトウェア開発・設計
 
クラウドデザインパターンのススメ
クラウドデザインパターンのススメクラウドデザインパターンのススメ
クラウドデザインパターンのススメ
 
クラウドデザインパターンから始めるクラウドの利点と弱点の理解~提案から設計・開発・保守に活かす!~
クラウドデザインパターンから始めるクラウドの利点と弱点の理解~提案から設計・開発・保守に活かす!~クラウドデザインパターンから始めるクラウドの利点と弱点の理解~提案から設計・開発・保守に活かす!~
クラウドデザインパターンから始めるクラウドの利点と弱点の理解~提案から設計・開発・保守に活かす!~
 
Enterprise cloud design pattern 大量データ処理アーキテクチャの構築
Enterprise cloud design pattern 大量データ処理アーキテクチャの構築Enterprise cloud design pattern 大量データ処理アーキテクチャの構築
Enterprise cloud design pattern 大量データ処理アーキテクチャの構築
 
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsiderMoq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
 

Cogbot no9 CNTKハンズオン資料

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