Soumettre la recherche
Mettre en ligne
Chainer の Trainer 解説と NStepLSTM について
•
18 j'aime
•
14,296 vues
Retrieva inc.
Suivre
レトリバセミナー 2017/03/15 Movie: https://www.youtube.com/watch?v=ok_bvPKAEaM
Lire moins
Lire la suite
Ingénierie
Signaler
Partager
Signaler
Partager
1 sur 50
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Quantum Support Vector Machine
Quantum Support Vector Machine
Yuma Nakamura
[DL輪読会]Relational inductive biases, deep learning, and graph networks
[DL輪読会]Relational inductive biases, deep learning, and graph networks
Deep Learning JP
Active Learning 入門
Active Learning 入門
Shuyo Nakatani
[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...
[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...
Deep Learning JP
SchNet: A continuous-filter convolutional neural network for modeling quantum...
SchNet: A continuous-filter convolutional neural network for modeling quantum...
Kazuki Fujikawa
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
Preferred Networks
データに内在する構造をみるための埋め込み手法
データに内在する構造をみるための埋め込み手法
Tatsuya Shirakawa
【DL輪読会】GIT RE-BASIN: MERGING MODELS MODULO PERMU- TATION SYMMETRIES
【DL輪読会】GIT RE-BASIN: MERGING MODELS MODULO PERMU- TATION SYMMETRIES
Deep Learning JP
Recommandé
Quantum Support Vector Machine
Quantum Support Vector Machine
Yuma Nakamura
[DL輪読会]Relational inductive biases, deep learning, and graph networks
[DL輪読会]Relational inductive biases, deep learning, and graph networks
Deep Learning JP
Active Learning 入門
Active Learning 入門
Shuyo Nakatani
[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...
[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...
Deep Learning JP
SchNet: A continuous-filter convolutional neural network for modeling quantum...
SchNet: A continuous-filter convolutional neural network for modeling quantum...
Kazuki Fujikawa
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
Preferred Networks
データに内在する構造をみるための埋め込み手法
データに内在する構造をみるための埋め込み手法
Tatsuya Shirakawa
【DL輪読会】GIT RE-BASIN: MERGING MODELS MODULO PERMU- TATION SYMMETRIES
【DL輪読会】GIT RE-BASIN: MERGING MODELS MODULO PERMU- TATION SYMMETRIES
Deep Learning JP
Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)
Yoshitaka Ushiku
Triplet Loss 徹底解説
Triplet Loss 徹底解説
tancoro
能動学習セミナー
能動学習セミナー
Preferred Networks
[DL輪読会]SOLAR: Deep Structured Representations for Model-Based Reinforcement L...
[DL輪読会]SOLAR: Deep Structured Representations for Model-Based Reinforcement L...
Deep Learning JP
第3回NIPS読み会・関西発表資料
第3回NIPS読み会・関西発表資料
Takato Horii
第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知
Chika Inoshita
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
Deep Learning JP
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
Deep Learning JP
論文紹介 No-Reward Meta Learning (RL architecture勉強会)
論文紹介 No-Reward Meta Learning (RL architecture勉強会)
Yusuke Nakata
MIRU2016 チュートリアル
MIRU2016 チュートリアル
Shunsuke Ono
Hyperoptとその周辺について
Hyperoptとその周辺について
Keisuke Hosaka
[DL輪読会]近年のエネルギーベースモデルの進展
[DL輪読会]近年のエネルギーベースモデルの進展
Deep Learning JP
Long-Tailed Classificationの最新動向について
Long-Tailed Classificationの最新動向について
Plot Hong
ICLR2020読み会 Stable Rank Normalization
ICLR2020読み会 Stable Rank Normalization
ohken
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
Takao Yamanaka
【DL輪読会】SimCSE: Simple Contrastive Learning of Sentence Embeddings (EMNLP 2021)
【DL輪読会】SimCSE: Simple Contrastive Learning of Sentence Embeddings (EMNLP 2021)
Deep Learning JP
Introduction to Prioritized Experience Replay
Introduction to Prioritized Experience Replay
WEBFARMER. ltd.
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
Yusuke Uchida
safe and efficient off policy reinforcement learning
safe and efficient off policy reinforcement learning
Ryo Iwaki
深層ニューラルネットワークの積分表現(Deepを定式化する数学)
深層ニューラルネットワークの積分表現(Deepを定式化する数学)
Katsuya Ito
ブースティング入門
ブースティング入門
Retrieva inc.
Convolutional Neural Networks のトレンド @WBAFLカジュアルトーク#2
Convolutional Neural Networks のトレンド @WBAFLカジュアルトーク#2
Daiki Shimada
Contenu connexe
Tendances
Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)
Yoshitaka Ushiku
Triplet Loss 徹底解説
Triplet Loss 徹底解説
tancoro
能動学習セミナー
能動学習セミナー
Preferred Networks
[DL輪読会]SOLAR: Deep Structured Representations for Model-Based Reinforcement L...
[DL輪読会]SOLAR: Deep Structured Representations for Model-Based Reinforcement L...
Deep Learning JP
第3回NIPS読み会・関西発表資料
第3回NIPS読み会・関西発表資料
Takato Horii
第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知
Chika Inoshita
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
Deep Learning JP
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
Deep Learning JP
論文紹介 No-Reward Meta Learning (RL architecture勉強会)
論文紹介 No-Reward Meta Learning (RL architecture勉強会)
Yusuke Nakata
MIRU2016 チュートリアル
MIRU2016 チュートリアル
Shunsuke Ono
Hyperoptとその周辺について
Hyperoptとその周辺について
Keisuke Hosaka
[DL輪読会]近年のエネルギーベースモデルの進展
[DL輪読会]近年のエネルギーベースモデルの進展
Deep Learning JP
Long-Tailed Classificationの最新動向について
Long-Tailed Classificationの最新動向について
Plot Hong
ICLR2020読み会 Stable Rank Normalization
ICLR2020読み会 Stable Rank Normalization
ohken
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
Takao Yamanaka
【DL輪読会】SimCSE: Simple Contrastive Learning of Sentence Embeddings (EMNLP 2021)
【DL輪読会】SimCSE: Simple Contrastive Learning of Sentence Embeddings (EMNLP 2021)
Deep Learning JP
Introduction to Prioritized Experience Replay
Introduction to Prioritized Experience Replay
WEBFARMER. ltd.
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
Yusuke Uchida
safe and efficient off policy reinforcement learning
safe and efficient off policy reinforcement learning
Ryo Iwaki
深層ニューラルネットワークの積分表現(Deepを定式化する数学)
深層ニューラルネットワークの積分表現(Deepを定式化する数学)
Katsuya Ito
Tendances
(20)
Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)
Triplet Loss 徹底解説
Triplet Loss 徹底解説
能動学習セミナー
能動学習セミナー
[DL輪読会]SOLAR: Deep Structured Representations for Model-Based Reinforcement L...
[DL輪読会]SOLAR: Deep Structured Representations for Model-Based Reinforcement L...
第3回NIPS読み会・関西発表資料
第3回NIPS読み会・関西発表資料
第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
論文紹介 No-Reward Meta Learning (RL architecture勉強会)
論文紹介 No-Reward Meta Learning (RL architecture勉強会)
MIRU2016 チュートリアル
MIRU2016 チュートリアル
Hyperoptとその周辺について
Hyperoptとその周辺について
[DL輪読会]近年のエネルギーベースモデルの進展
[DL輪読会]近年のエネルギーベースモデルの進展
Long-Tailed Classificationの最新動向について
Long-Tailed Classificationの最新動向について
ICLR2020読み会 Stable Rank Normalization
ICLR2020読み会 Stable Rank Normalization
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
【DL輪読会】SimCSE: Simple Contrastive Learning of Sentence Embeddings (EMNLP 2021)
【DL輪読会】SimCSE: Simple Contrastive Learning of Sentence Embeddings (EMNLP 2021)
Introduction to Prioritized Experience Replay
Introduction to Prioritized Experience Replay
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
safe and efficient off policy reinforcement learning
safe and efficient off policy reinforcement learning
深層ニューラルネットワークの積分表現(Deepを定式化する数学)
深層ニューラルネットワークの積分表現(Deepを定式化する数学)
En vedette
ブースティング入門
ブースティング入門
Retrieva inc.
Convolutional Neural Networks のトレンド @WBAFLカジュアルトーク#2
Convolutional Neural Networks のトレンド @WBAFLカジュアルトーク#2
Daiki Shimada
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
Ryosuke Okuta
進化するChainer
進化するChainer
Yuya Unno
予測型戦略を知るための機械学習チュートリアル
予測型戦略を知るための機械学習チュートリアル
Yuya Unno
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
Seiya Tokui
MIRU2014 tutorial deeplearning
MIRU2014 tutorial deeplearning
Takayoshi Yamashita
Tensor flow勉強会 (ayashiminagaranotensorflow)
Tensor flow勉強会 (ayashiminagaranotensorflow)
tak9029
深層学習フレームワークChainerの特徴
深層学習フレームワークChainerの特徴
Yuya Unno
En vedette
(9)
ブースティング入門
ブースティング入門
Convolutional Neural Networks のトレンド @WBAFLカジュアルトーク#2
Convolutional Neural Networks のトレンド @WBAFLカジュアルトーク#2
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
進化するChainer
進化するChainer
予測型戦略を知るための機械学習チュートリアル
予測型戦略を知るための機械学習チュートリアル
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
MIRU2014 tutorial deeplearning
MIRU2014 tutorial deeplearning
Tensor flow勉強会 (ayashiminagaranotensorflow)
Tensor flow勉強会 (ayashiminagaranotensorflow)
深層学習フレームワークChainerの特徴
深層学習フレームワークChainerの特徴
Similaire à Chainer の Trainer 解説と NStepLSTM について
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
Akira Takahashi
XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由
Ransui Iso
Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版
Daiyu Hatakeyama
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
Shohei Okada
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
Ayumi Goto
初めてのPadrino
初めてのPadrino
Takeshi Yabe
究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)
fumoto kazuhiro
継承を用いたコードのテスト
継承を用いたコードのテスト
Yu Kobayashi
adversarial training.pptx
adversarial training.pptx
ssuserc45ddf
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for Java
Yuta Kawadai
怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01
nagachika t
TensorFlowをもう少し詳しく入門
TensorFlowをもう少し詳しく入門
tak9029
アップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられる
Brian Gesiak
Play2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだこと
dcubeio
Pythonによる機械学習入門 ~Deep Learningに挑戦~
Pythonによる機械学習入門 ~Deep Learningに挑戦~
Yasutomo Kawanishi
JavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 Autumn
Koji Ishimoto
Web技術勉強会 20100925
Web技術勉強会 20100925
龍一 田中
Controllerのbefore_actionにおける インスタンス変数セットについて
Controllerのbefore_actionにおける インスタンス変数セットについて
pospome
SAS Enterprise Minerを使用した機械学習
SAS Enterprise Minerを使用した機械学習
SAS Institute Japan
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Yoshifumi Kawai
Similaire à Chainer の Trainer 解説と NStepLSTM について
(20)
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由
Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
初めてのPadrino
初めてのPadrino
究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)
継承を用いたコードのテスト
継承を用いたコードのテスト
adversarial training.pptx
adversarial training.pptx
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for Java
怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01
TensorFlowをもう少し詳しく入門
TensorFlowをもう少し詳しく入門
アップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられる
Play2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだこと
Pythonによる機械学習入門 ~Deep Learningに挑戦~
Pythonによる機械学習入門 ~Deep Learningに挑戦~
JavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 Autumn
Web技術勉強会 20100925
Web技術勉強会 20100925
Controllerのbefore_actionにおける インスタンス変数セットについて
Controllerのbefore_actionにおける インスタンス変数セットについて
SAS Enterprise Minerを使用した機械学習
SAS Enterprise Minerを使用した機械学習
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Plus de Retrieva inc.
コンテナ仮想、その裏側 〜user namespaceとrootlessコンテナ〜
コンテナ仮想、その裏側 〜user namespaceとrootlessコンテナ〜
Retrieva inc.
音声認識入門(前編)
音声認識入門(前編)
Retrieva inc.
自然言語処理シリーズ9 構文解析 3.6-3.8節
自然言語処理シリーズ9 構文解析 3.6-3.8節
Retrieva inc.
Linuxカーネルを読んで改めて知るプロセスとスレッドの違い
Linuxカーネルを読んで改めて知るプロセスとスレッドの違い
Retrieva inc.
IP電話交換機ソフト Asterisk について
IP電話交換機ソフト Asterisk について
Retrieva inc.
論理的思考で読解力を培う
論理的思考で読解力を培う
Retrieva inc.
キートップのノベルティを作ってみた話
キートップのノベルティを作ってみた話
Retrieva inc.
自然言語処理勉強会11章 情報抽出と知識獲得
自然言語処理勉強会11章 情報抽出と知識獲得
Retrieva inc.
キートップのノベルティを作った話
キートップのノベルティを作った話
Retrieva inc.
放送大学テキスト「自然言語処理」 6章 意味の解析(1)
放送大学テキスト「自然言語処理」 6章 意味の解析(1)
Retrieva inc.
キーボード自作のススメ
キーボード自作のススメ
Retrieva inc.
レトリバのキートップ説明書
レトリバのキートップ説明書
Retrieva inc.
情報検索の基礎
情報検索の基礎
Retrieva inc.
ChainerでDeep Learningを試すために必要なこと
ChainerでDeep Learningを試すために必要なこと
Retrieva inc.
20170221 cnet live講演資料
20170221 cnet live講演資料
Retrieva inc.
Making Google Cardboard and Laser Cutter
Making Google Cardboard and Laser Cutter
Retrieva inc.
Chainerで学ぶdeep learning
Chainerで学ぶdeep learning
Retrieva inc.
Plus de Retrieva inc.
(17)
コンテナ仮想、その裏側 〜user namespaceとrootlessコンテナ〜
コンテナ仮想、その裏側 〜user namespaceとrootlessコンテナ〜
音声認識入門(前編)
音声認識入門(前編)
自然言語処理シリーズ9 構文解析 3.6-3.8節
自然言語処理シリーズ9 構文解析 3.6-3.8節
Linuxカーネルを読んで改めて知るプロセスとスレッドの違い
Linuxカーネルを読んで改めて知るプロセスとスレッドの違い
IP電話交換機ソフト Asterisk について
IP電話交換機ソフト Asterisk について
論理的思考で読解力を培う
論理的思考で読解力を培う
キートップのノベルティを作ってみた話
キートップのノベルティを作ってみた話
自然言語処理勉強会11章 情報抽出と知識獲得
自然言語処理勉強会11章 情報抽出と知識獲得
キートップのノベルティを作った話
キートップのノベルティを作った話
放送大学テキスト「自然言語処理」 6章 意味の解析(1)
放送大学テキスト「自然言語処理」 6章 意味の解析(1)
キーボード自作のススメ
キーボード自作のススメ
レトリバのキートップ説明書
レトリバのキートップ説明書
情報検索の基礎
情報検索の基礎
ChainerでDeep Learningを試すために必要なこと
ChainerでDeep Learningを試すために必要なこと
20170221 cnet live講演資料
20170221 cnet live講演資料
Making Google Cardboard and Laser Cutter
Making Google Cardboard and Laser Cutter
Chainerで学ぶdeep learning
Chainerで学ぶdeep learning
Chainer の Trainer 解説と NStepLSTM について
1.
Chainer の Trainer
解説と NStepLSTM について 株式会社レトリバ © 2017 Retrieva, Inc.
2.
⾃⼰紹介 • ⽩⼟慧(シラツチ ケイ) •
株式会社レトリバ • 2016年4⽉⼊社 • Ruby on Rails / JavaScript • フロントエンド側の⼈間 • ⼤学時代は複雑ネットワーク科学の研究 • Chainer ⼊⾨中 © 2017 Retrieva, Inc. 2
3.
アジェンダ • 第1部 Chainer
における Trainer の解説 • 第2部 NStepLSTM との格闘 © 2017 Retrieva, Inc. 3
4.
アンケート • Chainer を使っている⽅ •
Chainer の Trainer を使っている⽅ • LSTM を使っている⽅ • NStepLSTM を使っている⽅ • NStepLSTM と Trainer を使っている⽅ © 2017 Retrieva, Inc. 4
5.
第1部 Chainer における
Trainer © 2017 Retrieva, Inc. 5
6.
Chainer における Trainer •
Chainer 1.11.0 から導⼊された学習フレームワーク • batchの取り出し、forward/backward が抽象化されている • 進捗表⽰、モデルのスナップショットなど • Trainer 後から⼊⾨した⼈(私も)は、MNIST のサンプルが Trainerで抽象化されていて、何が起きているのかわからない • 以前から Chainer を使っている⼈は、Trainer なしで動かして いることが多い © 2017 Retrieva, Inc. 6
7.
Trainer 全体図 (train_mnist.py) ©
2017 Retrieva, Inc. 7 Trainer Updater (StandardUpdater) Iterator Optimizer Classifier model (MLP) train dataset Evaluator Iterator test dataset Extensions • dump_graph, snapshot • LogReport, PrintReport • ProgressBar • converter • loss_func • device • converter • device
8.
Trainer • Trainer フレームワークの⼤元 •
渡された Updater、(必要があれば) Evaluator を実⾏する • グラフのダンプ、スナップショット、レポーティング、進捗表 ⽰などを、Extension として実⾏できる © 2017 Retrieva, Inc. 8
9.
Trainer • 指定した epoch
数になるまで、Updater の update() を呼ぶ © 2017 Retrieva, Inc. 9 # examples/mnist/train_mnist.py trainer = training.Trainer(updater, (args.epoch, 'epoch'), out=args.out) # chainer/training/trainer.py class Trainer(object): def run(self): update = self.updater.update # main training loop try: while not stop_trigger(self): self.observation = {} with reporter.scope(self.observation): update()
10.
Updater © 2017 Retrieva,
Inc. 10 Trainer Updater (StandardUpdater) Iterator Optimizer Classifier model (MLP) train dataset Evaluator Iterator test dataset Extensions • dump_graph, snapshot • LogReport, PrintReport • ProgressBar • converter • loss_func • device • converter • device
11.
Updater • ⼊⼒を逐次実⾏する • ⼊⼒の
Iterator と、Optimizer を持つ • Iterator から⼀つずつデータを読み込み、変換し、Optimizer に かける © 2017 Retrieva, Inc. 11
12.
Updater © 2017 Retrieva,
Inc. 12 # examples/mnist/train_mnist.py updater = training.StandardUpdater(train_iter, optimizer, device=args.gpu) # chainer/training/updater.py class StandardUpdater(Updater): def update_core(self): batch = self._iterators['main'].next() in_arrays = self.converter(batch, self.device) optimizer = self._optimizers['main'] loss_func = self.loss_func or optimizer.target if isinstance(in_arrays, tuple): in_vars = tuple(variable.Variable(x) for x in in_arrays) optimizer.update(loss_func, *in_vars)
13.
Updater © 2017 Retrieva,
Inc. 13 # examples/mnist/train_mnist.py updater = training.StandardUpdater(train_iter, optimizer, device=args.gpu) # chainer/training/updater.py class StandardUpdater(Updater): def update_core(self): batch = self._iterators['main'].next() in_arrays = self.converter(batch, self.device) optimizer = self._optimizers['main'] loss_func = self.loss_func or optimizer.target if isinstance(in_arrays, tuple): in_vars = tuple(variable.Variable(x) for x in in_arrays) optimizer.update(loss_func, *in_vars) Iterator から ⼀つ呼び出す
14.
Updater © 2017 Retrieva,
Inc. 14 # examples/mnist/train_mnist.py updater = training.StandardUpdater(train_iter, optimizer, device=args.gpu) # chainer/training/updater.py class StandardUpdater(Updater): def update_core(self): batch = self._iterators['main'].next() in_arrays = self.converter(batch, self.device) optimizer = self._optimizers['main'] loss_func = self.loss_func or optimizer.target if isinstance(in_arrays, tuple): in_vars = tuple(variable.Variable(x) for x in in_arrays) optimizer.update(loss_func, *in_vars) Iterator から ⼀つ呼び出す Converter にかける (変換し、to_gpu する)
15.
Updater © 2017 Retrieva,
Inc. 15 # examples/mnist/train_mnist.py updater = training.StandardUpdater(train_iter, optimizer, device=args.gpu) # chainer/training/updater.py class StandardUpdater(Updater): def update_core(self): batch = self._iterators['main'].next() in_arrays = self.converter(batch, self.device) optimizer = self._optimizers['main'] loss_func = self.loss_func or optimizer.target if isinstance(in_arrays, tuple): in_vars = tuple(variable.Variable(x) for x in in_arrays) optimizer.update(loss_func, *in_vars) Iterator から ⼀つ呼び出す Converter にかける (変換し、to_gpu する) Optimizer の update を呼ぶ
16.
Iterator © 2017 Retrieva,
Inc. 16 Trainer Updater (StandardUpdater) Iterator Optimizer Classifier model (MLP) train dataset Evaluator Iterator test dataset Extensions • dump_graph, snapshot • LogReport, PrintReport • ProgressBar • converter • loss_func • device • converter • device
17.
Iterator © 2017 Retrieva,
Inc. 17 # chainer/iterators/serial_iterator.py class SerialIterator(iterator.Iterator): def __next__(self): ... return batch @property def epoch_detail(self): return self.epoch + self.current_position / len(self.dataset) # examples/mnist/train_mnist.py train, test = chainer.datasets.get_mnist() train_iter = chainer.iterators.SerialIterator(train, args.batchsize) • Iterator として、batch を返す • 回している回数の管理をする
18.
Optimizer © 2017 Retrieva,
Inc. 18 Trainer Updater (StandardUpdater) Iterator Optimizer Classifier model (MLP) train dataset Evaluator Iterator test dataset Extensions • dump_graph, snapshot • LogReport, PrintReport • ProgressBar • converter • loss_func • device • converter • device
19.
Optimizer • ⼊⼒データを model
に forward し、返り値の loss を backward する • 最適化アルゴリズムごとに実装がある • SGD, MomentumSGD, Adam, … • Optimizer で抽象化されている © 2017 Retrieva, Inc. 19
20.
Optimizer © 2017 Retrieva,
Inc. 20 # chainer/training/updater.py loss_func = self.loss_func or optimizer.target optimizer.update(loss_func, *in_vars) # examples/mnist/train_mnist.py optimizer = chainer.optimizers.Adam() optimizer.setup(model) # chainer/optimizer.py class GradientMethod(Optimizer): def update(self, lossfun=None, *args, **kwds): if lossfun is not None: use_cleargrads = getattr(self, '_use_cleargrads', False) loss = lossfun(*args, **kwds) if use_cleargrads: self.target.cleargrads() else: self.target.zerograds() loss.backward()
21.
Optimizer © 2017 Retrieva,
Inc. 21 # chainer/training/updater.py loss_func = self.loss_func or optimizer.target optimizer.update(loss_func, *in_vars) # examples/mnist/train_mnist.py optimizer = chainer.optimizers.Adam() optimizer.setup(model) # chainer/optimizer.py class GradientMethod(Optimizer): def update(self, lossfun=None, *args, **kwds): if lossfun is not None: use_cleargrads = getattr(self, '_use_cleargrads', False) loss = lossfun(*args, **kwds) if use_cleargrads: self.target.cleargrads() else: self.target.zerograds() loss.backward() target は 渡された model (Classifier)
22.
Optimizer © 2017 Retrieva,
Inc. 22 # chainer/training/updater.py loss_func = self.loss_func or optimizer.target optimizer.update(loss_func, *in_vars) # examples/mnist/train_mnist.py optimizer = chainer.optimizers.Adam() optimizer.setup(model) # chainer/optimizer.py class GradientMethod(Optimizer): def update(self, lossfun=None, *args, **kwds): if lossfun is not None: use_cleargrads = getattr(self, '_use_cleargrads', False) loss = lossfun(*args, **kwds) if use_cleargrads: self.target.cleargrads() else: self.target.zerograds() loss.backward() target は 渡された model (Classifier) model に forward
23.
Optimizer © 2017 Retrieva,
Inc. 23 # chainer/training/updater.py loss_func = self.loss_func or optimizer.target optimizer.update(loss_func, *in_vars) # examples/mnist/train_mnist.py optimizer = chainer.optimizers.Adam() optimizer.setup(model) # chainer/optimizer.py class GradientMethod(Optimizer): def update(self, lossfun=None, *args, **kwds): if lossfun is not None: use_cleargrads = getattr(self, '_use_cleargrads', False) loss = lossfun(*args, **kwds) if use_cleargrads: self.target.cleargrads() else: self.target.zerograds() loss.backward() target は 渡された model (Classifier) model に forward backward を実⾏
24.
Classifier © 2017 Retrieva,
Inc. 24 Trainer Updater (StandardUpdater) Iterator Optimizer Classifier model (MLP) train dataset Evaluator Iterator test dataset Extensions • dump_graph, snapshot • LogReport, PrintReport • ProgressBar • converter • loss_func • device • converter • device
25.
Classifier • 教師あり学習⽤の model
のラッパー • ⼊⼒と正解データから、loss と accuracy を計算する © 2017 Retrieva, Inc. 25
26.
Classifier © 2017 Retrieva,
Inc. 26 # examples/mnist/train_mnist.py model = L.Classifier(MLP(args.unit, 10)) # chainer/links/model/classifier.py class Classifier(link.Chain): def __init__(self, predictor, lossfun=softmax_cross_entropy.softmax_cross_entropy, accfun=accuracy.accuracy): def __call__(self, *args): self.y = self.predictor(*x) self.loss = self.lossfun(self.y, t) reporter.report({'loss': self.loss}, self) if self.compute_accuracy: self.accuracy = self.accfun(self.y, t) reporter.report({'accuracy': self.accuracy}, self) return self.loss
27.
Classifier © 2017 Retrieva,
Inc. 27 # examples/mnist/train_mnist.py model = L.Classifier(MLP(args.unit, 10)) # chainer/links/model/classifier.py class Classifier(link.Chain): def __init__(self, predictor, lossfun=softmax_cross_entropy.softmax_cross_entropy, accfun=accuracy.accuracy): def __call__(self, *args): self.y = self.predictor(*x) self.loss = self.lossfun(self.y, t) reporter.report({'loss': self.loss}, self) if self.compute_accuracy: self.accuracy = self.accfun(self.y, t) reporter.report({'accuracy': self.accuracy}, self) return self.loss 損失関数を指定する
28.
Classifier © 2017 Retrieva,
Inc. 28 # examples/mnist/train_mnist.py model = L.Classifier(MLP(args.unit, 10)) # chainer/links/model/classifier.py class Classifier(link.Chain): def __init__(self, predictor, lossfun=softmax_cross_entropy.softmax_cross_entropy, accfun=accuracy.accuracy): def __call__(self, *args): self.y = self.predictor(*x) self.loss = self.lossfun(self.y, t) reporter.report({'loss': self.loss}, self) if self.compute_accuracy: self.accuracy = self.accfun(self.y, t) reporter.report({'accuracy': self.accuracy}, self) return self.loss 損失関数を指定する model に forward
29.
Classifier © 2017 Retrieva,
Inc. 29 # examples/mnist/train_mnist.py model = L.Classifier(MLP(args.unit, 10)) # chainer/links/model/classifier.py class Classifier(link.Chain): def __init__(self, predictor, lossfun=softmax_cross_entropy.softmax_cross_entropy, accfun=accuracy.accuracy): def __call__(self, *args): self.y = self.predictor(*x) self.loss = self.lossfun(self.y, t) reporter.report({'loss': self.loss}, self) if self.compute_accuracy: self.accuracy = self.accfun(self.y, t) reporter.report({'accuracy': self.accuracy}, self) return self.loss 損失関数を指定する model に forward loss を算出 accuracy を算出
30.
Classifier © 2017 Retrieva,
Inc. 30 # examples/mnist/train_mnist.py model = L.Classifier(MLP(args.unit, 10)) # chainer/links/model/classifier.py class Classifier(link.Chain): def __init__(self, predictor, lossfun=softmax_cross_entropy.softmax_cross_entropy, accfun=accuracy.accuracy): def __call__(self, *args): self.y = self.predictor(*x) self.loss = self.lossfun(self.y, t) reporter.report({'loss': self.loss}, self) if self.compute_accuracy: self.accuracy = self.accfun(self.y, t) reporter.report({'accuracy': self.accuracy}, self) return self.loss 損失関数を指定する model に forward loss を算出 accuracy を算出 loss を返す
31.
Evaluator © 2017 Retrieva,
Inc. 31 Trainer Updater (StandardUpdater) Iterator Optimizer Classifier model (MLP) train dataset Evaluator Iterator test dataset Extensions • dump_graph, snapshot • LogReport, PrintReport • ProgressBar • converter • loss_func • device • converter • device
32.
Evaluator • テストデータに対して、loss, accuracy
などを計算し、検証す る • epoch ごとに、現在まで学習された model に対して検証する • ⼤まかには、Updater と対応している © 2017 Retrieva, Inc. 32
33.
Evaluator © 2017 Retrieva,
Inc. 33 # examples/mnist/train_mnist.py test_iter = chainer.iterators.SerialIterator(test, args.batchsize, repeat=False, shuffle=False) trainer.extend(extensions.Evaluator(test_iter, model, device=args.gpu)) # chainer/training/extensions/evaluator.py class Evaluator(extension.Extension): def evaluate(self): iterator = self._iterators['main'] target = self._targets['main'] eval_func = self.eval_func or target it = copy.copy(iterator) for batch in it: observation = {} with reporter_module.report_scope(observation): in_arrays = self.converter(batch, self.device) if isinstance(in_arrays, tuple): in_vars = tuple(variable.Variable(x, volatile='on') for x in in_arrays) eval_func(*in_vars)
34.
Evaluator © 2017 Retrieva,
Inc. 34 # examples/mnist/train_mnist.py test_iter = chainer.iterators.SerialIterator(test, args.batchsize, repeat=False, shuffle=False) trainer.extend(extensions.Evaluator(test_iter, model, device=args.gpu)) # chainer/training/extensions/evaluator.py class Evaluator(extension.Extension): def evaluate(self): iterator = self._iterators['main'] target = self._targets['main'] eval_func = self.eval_func or target it = copy.copy(iterator) for batch in it: observation = {} with reporter_module.report_scope(observation): in_arrays = self.converter(batch, self.device) if isinstance(in_arrays, tuple): in_vars = tuple(variable.Variable(x, volatile='on') for x in in_arrays) eval_func(*in_vars) Iterator から 全部呼び出す
35.
Evaluator © 2017 Retrieva,
Inc. 35 # examples/mnist/train_mnist.py test_iter = chainer.iterators.SerialIterator(test, args.batchsize, repeat=False, shuffle=False) trainer.extend(extensions.Evaluator(test_iter, model, device=args.gpu)) # chainer/training/extensions/evaluator.py class Evaluator(extension.Extension): def evaluate(self): iterator = self._iterators['main'] target = self._targets['main'] eval_func = self.eval_func or target it = copy.copy(iterator) for batch in it: observation = {} with reporter_module.report_scope(observation): in_arrays = self.converter(batch, self.device) if isinstance(in_arrays, tuple): in_vars = tuple(variable.Variable(x, volatile='on') for x in in_arrays) eval_func(*in_vars) Iterator から 全部呼び出す Converter にかける (変換し、to_gpu する)
36.
Evaluator © 2017 Retrieva,
Inc. 36 # examples/mnist/train_mnist.py test_iter = chainer.iterators.SerialIterator(test, args.batchsize, repeat=False, shuffle=False) trainer.extend(extensions.Evaluator(test_iter, model, device=args.gpu)) # chainer/training/extensions/evaluator.py class Evaluator(extension.Extension): def evaluate(self): iterator = self._iterators['main'] target = self._targets['main'] eval_func = self.eval_func or target it = copy.copy(iterator) for batch in it: observation = {} with reporter_module.report_scope(observation): in_arrays = self.converter(batch, self.device) if isinstance(in_arrays, tuple): in_vars = tuple(variable.Variable(x, volatile='on') for x in in_arrays) eval_func(*in_vars) Iterator から 全部呼び出す Converter にかける (変換し、to_gpu する) model に forward
37.
説明していないこと • Reporter 周り •
Evaluator で、eval_func しているが戻り値を使っていない理由 • (ざっくり⾔うと)Classifier 内で、reporter に loss, accuracy を登 録している • Extension 周り © 2017 Retrieva, Inc. 37
38.
第2部 NStrepLSTM との格闘 ©
2017 Retrieva, Inc. 38
39.
NStepLSTM とは • RNN
のための、Chainer 1.16.0 で導⼊された Link • cuDNN の恩恵を受けて、⾼速に動く • 既存の LSTM と使い⽅が違う • 既存の LSTM のサンプルは examples/ptb/train_ptb.py © 2017 Retrieva, Inc. 39
40.
RNN • Recurrent Neural
Network • 並び⽅に意味のある、「系列データ」を扱う場合に⽤いられる • 応⽤例:⽂章の推定、⾳声認識、変動する数値の推定 • 例:⽂章が途中まで与えられた時、次の単語を予測する問題 © 2017 Retrieva, Inc. 40 私 は ⽩い ⽝ が ? x1 x2 x3 x4 x5 y1 y2 y3 y4 y5 x1〜x5を⼊⼒データと して、y5を推定する。
41.
LSTM と NStepLSTM データ1
1 2 データ1ラベル A B データ2 1 2 3 データ2ラベル A B C © 2017 Retrieva, Inc. 41 • LSTM(逐次渡す) • x1: Variable[1, 1] • t1: Variable[B, B] • x2: Variable[2, 2] • t2: Variable[0, C] • NStepLSTM(⼀度に渡す) • xs: [Variable[1,2], Variable[1,2,3]] • ts: [Variable[A,B], Variable[A,B,C]]
42.
LSTM と NStepLSTM データ1
1 2 データ1ラベル A B データ2 1 2 3 データ2ラベル A B C © 2017 Retrieva, Inc. 42 • LSTM(逐次渡す) • x1: Variable[1, 1] • t1: Variable[B, B] • x2: Variable[2, 2] • t2: Variable[0, C] • NStepLSTM(⼀度に渡す) • xs: [Variable[1,2], Variable[1,2,3]] • ts: [Variable[A,B], Variable[A,B,C]] ⻑さが合っていない時、 0 などで埋める必要がある ⻑さを合わせなくて良い Variable の list を渡す
43.
NStepLSTM サンプル © 2017
Retrieva, Inc. 43 class RNNNStepLSTM(chainer.Chain): def __init__(self, n_layer, n_units, train=True): super(RNNNStepLSTM, self).__init__( l1 = L.NStepLSTM(n_layer, n_units, n_units, 0.5, True), ) self.n_layer = n_layer self.n_units = n_units def __call__(self, xs): xp = self.xp hx = chainer.Variable(xp.zeros( (self.n_layer, len(xs), self.n_units), dtype=xp.float32)) cx = chainer.Variable(xp.zeros( (self.n_layer, len(xs), self.n_units), dtype=xp.float32)) hy, cy, ys = self.l1(hx, cx, xs, train=self.train)
44.
NStepLSTM サンプル © 2017
Retrieva, Inc. 44 class RNNNStepLSTM(chainer.Chain): def __init__(self, n_layer, n_units, train=True): super(RNNNStepLSTM, self).__init__( l1 = L.NStepLSTM(n_layer, n_units, n_units, 0.5, True), ) self.n_layer = n_layer self.n_units = n_units def __call__(self, xs): xp = self.xp hx = chainer.Variable(xp.zeros( (self.n_layer, len(xs), self.n_units), dtype=xp.float32)) cx = chainer.Variable(xp.zeros( (self.n_layer, len(xs), self.n_units), dtype=xp.float32)) hy, cy, ys = self.l1(hx, cx, xs, train=self.train) レイヤー数、ユニット数、 Dropout を指定する パラメータの 初期状態を作成し、 渡す Variable のリストを ⼊⼒する 出⼒も Variable の リスト
45.
NStepLSTM と、標準的な Trainer
の齟齬 • 標準的な Trainer の構成では、model には Variable を渡す • NStepLSTM では、「Variable のリスト」を渡さなければいけない © 2017 Retrieva, Inc. 45 # chainer/training/updater.py class StandardUpdater(Updater): def update_core(self): batch = self._iterators['main'].next() in_arrays = self.converter(batch, self.device) ... if isinstance(in_arrays, tuple): in_vars = tuple(variable.Variable(x) for x in in_arrays) optimizer.update(loss_func, *in_vars) Variableを作成し、 そのまま渡している
46.
NStepLSTM と、標準的な Trainer
の齟齬 • loss の計算を、既存のメソッドに任せられない © 2017 Retrieva, Inc. 46 # chainer/links/model/classifier.py class Classifier(link.Chain): def __init__(self, predictor, lossfun=softmax_cross_entropy.softmax_cross_entropy, accfun=accuracy.accuracy): def __call__(self, *args): self.y = self.predictor(*x) self.loss = self.lossfun(self.y, t) reporter.report({'loss': self.loss}, self) if self.compute_accuracy: self.accuracy = self.accfun(self.y, t) reporter.report({'accuracy': self.accuracy}, self) return self.loss NStepLSTM の出⼒だと、 y は Variable のリスト accuracy も同様
47.
ptb/train_ptb.py を NStepLSTM
で • https://github.com/kei-s/chainer-ptb- nsteplstm/blob/master/train_ptb_nstep.py • できるだけ構成を同じにして(Trainer の上で)、 train_ptb.py を NStepLSTM を使って実装してみる • Disclaimer • testモード(100件)では完⾛したけど、全データは⾛らせていない • 無駄なコードはありそう… © 2017 Retrieva, Inc. 47
48.
ptb/train_ptb.py を NStepLSTM
で • モデル • EmbedID にかけるため、⼀度 concat し、split_axis でまた分ける • 系列のそれぞれの要素を Linear にかける • Iterator • bprop_len を Iterator に渡し、バッチで系列化したものを返す • Converter • NStepLSTM を使った seq2seq https://github.com/pfnet/chainer/pull/2070 を参照 • Updater • 系列をそのままモデルに渡すように変更 • Evaluator • 系列をそのままモデルに渡すように変更 • Lossfun • softmax_cross_entropy をそれぞれの系列に対してかけ、⾜し合わせる © 2017 Retrieva, Inc. 48
49.
ptb/train_ptb.py を NStepLSTM
で • ⾼速化したか? • Estimated time では 6時間 → 3時間 • とはいえ、実際に⾛らせると 3時間以上かかりそう • Estimated Time に Evaluator 部分が考慮されてなさそう • ⾼速化のために必要なこと • Chainer もしくは Numpy の世界で処理を終わらせること • Python の世界でループを回すとかなり遅くなる • Lossfun でループを回しているが、concat して渡してもよさそう(互換性が微 妙な予感) © 2017 Retrieva, Inc. 49
50.
© 2017 Retrieva,
Inc.
Télécharger maintenant