chainer2プログラミングの全体図

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
chainer2プログラミングの全体図 [2017/11/01]
adash333 [Chainer2でMNISTのコード]
chainer2プログラミングの全体図 [2018/10/07] (現在)
ライン 1: ライン 1:
-===== Chainerプログラミングの全体図(1)Trainerを利用しない場合 ​=====+===== Chainerプログラミングの全体図 =====
  
-必ずしもこの書き方ではなもよしい。。+<wrap hi>​Chainer2でMNIST目次</​wrap>​\\ 
 +[[Chainer2プログラミングの全体図]] 
 +  -[[(1)Chainer2を使用するためのimport文]] 
 +  -[[(2)データの準備・設定|(2)データの準備・設定(Chainer)]] 
 +  -[[(3)モデルの記述|(3)モデルの記述(Chainer)]] 
 +  -[[(4)モデルと最適化アルゴリズムの設定|(4)モデルと最適化アルゴリズムの設定(Chainer)]] 
 +  -[[(5)学習と結果の出力(Chainer)]] 
 +  -[[(6)結果の出力|(6)学習結果のパラメータの保存(Chainer)]] 
 +  -[[(7)推測|(7)推測(Chainer)]] 
 + 
 + 
 +あくまで一例とて記載させていただきます。 
 + 
 +WEB上のMNISTのサンプルコードを読んでいると、Kerasだと皆ほぼ同じコードになるのに、Chainerだと人によってコードが結構異なる感じで、初心者には本当にとっつきにくいイメージでした。 
 + 
 +Chainer 1.11.0から、Trainerというのが導入されたらしく、このサイトでは、Trainerを用いた記載方法のみ解説します。最初はIteratorとか意味不明言葉が出きて混乱しやすですが、我慢て、Iterator、Dataset、Optimizer、Model、Updater、Extensionsを勉強してくしかありません(Trainerを使用しないプログラミングができるレベルの人は、Trainerを理解してさっさと使われるのだと思われます) 
 + 
 +==== Trainerを利用する場合のChainer全体図 ====
  
-WEB上のMNISTのサンプルコード読んでいると、Kerasだと皆ほぼ同じコードにに、Chainerだと人によってコドが結構異なる感じ、初心者には本当にとっつきにくいイメージ+Trainerとは、Chainerで学習行う際に使用すると便利Chainerモジュ
  
-Chainer 1.11.0から、Trainerというのが導入れたらしく、このサイトでは、Trainerを用た記載方法のみ解説します。(筆者Trainer使用ないやり方を実行きなかったため。)+いきなりTrainerと言われてもさっぱりだと思いますが、コードコピペて1個ずつ理解するのみす!
  
-==== Trainerを利用しない場合のChainer全体図 ====+Trainerの構造は、以下のようにってるらしいです。\\ 
 +(出典:[[https://​qiita.com/​mitmul/​items/​eccf4e0a84cb784ba84a|Chainerビギナー向けチュートリアル Vol.1]] 
 +) 
 +{{:​pasted:​20171102-203705.png}}
  
-https://​books.google.co.jp/​books?​id=n342DwAAQBAJ&​pg=PA42&​lpg=PA42&​dq=chainer+%E5%85%A8%E4%BD%93%E5%9B%B3&​source=bl&​ots=1ybBZW8I4N&​sig=X7mUk9h3Ib7P6uk7uKv5F90l-vM&​hl=ja&​sa=X&​ved=0ahUKEwjQo5u1rfrWAhUFI5QKHSJaB5kQ6AEINTAC#​v=onepage&​q=chainer%20%E5%85%A8%E4%BD%93%E5%9B%B3&​f=false+私も最初にこの図を見たときは何がなんだかさっぱり分かりませんでしたが、この図をみながら、なんとなく、以下の全体図にざっと目を通して下さい。以後、具体的なコードを勉強するときに、『いま、全体図の中でどこのコードを書いているのか?』を把握しながら、Jupyter Notebookに自分の手でコードを写経して実行していくのがお勧めです。
  
 +●Chainer2プログラミングの流れ
  
 <​code>​ <​code>​
 +# ---------- train.py ---------- #
 (1)#1 Chainerを使用するためのimport文 (1)#1 Chainerを使用するためのimport文
  
 (2)#2 データの準備・設定 (2)#2 データの準備・設定
 +from chainer import iterators
 +# trainerを利用するために、Iteratorを定義してdatasetにアクセスできるようにする
  
 (3)#3 モデルの記述 (3)#3 モデルの記述
 class MyModel(Chain):​ class MyModel(Chain):​
     def __init__(self):​     def __init__(self):​
-        ​super(MyModel,​self).__init__(+       super(MyModel,​self).__init__(
             # パラメータを含む関数の宣言             # パラメータを含む関数の宣言
         )         )
-    ​ 
     def __call__(self,​ ...):     def __call__(self,​ ...):
     # モデルを記載     # モデルを記載
  
-(4)#4 モデルと最適化アルゴリズムの設定(ほぼお約束の3行)+(4)#4 モデルと最適化アルゴリズムの設定
 model = MyModel() model = MyModel()
 +model = L.Classifier(model)
 optimizer = optimizers.Adam() optimizer = optimizers.Adam()
 optimizer.setup(model) optimizer.setup(model)
  
-(5)#5 学習(Trainer利用しない場合) +(5)#5 学習と結果の出力 
-for epoch in range(繰り返し回数) +# UpdaterにIteratorとOptimizer渡す 
-    ​データの加工 +from chainer import training 
-    model.cleargrads() #勾配初期化 +updater = training.StandardUpdater(train_iter, optimizer, device=gpu_id) 
-    ​loss ​model(...)  #誤差計算 +TrainerにUpdaterを渡す 
-    loss.backward ​     #​勾配計算 +trainer ​training.Trainer(updater,​ (max_epoch, '​epoch'​), out='​mnist_result'​) 
-    ​optimizer.update ​  #パラメタ更新+TrainerにExtensionを追加 
 +from chainer.training import extensions 
 +    # trainer.extend()で、学習の進行状況を表すプログレスバや、lossのグラフ化と画像の保存などを行う 
 +# 学習を実行 
 +trainer.run()
  
-(6)#6 結果の出力 +(6)#​6 ​学習結果のパラメータの保存 
-</​code>​+# Save paramaters 
 +chainer.serializers.save_npz('​my_mnist.model',​ model)
  
-===== Chainerプログラミングの全体図2Trainer利用する場合 =====+# ---------- predict.py ---------- # 
 +#7 推測 
 +import numpy as np 
 +import chainer import serializers 
 +# Network definition 
 +    # train.py と同じModel定義 
 +# modelをClassifier化し、train.pyでの学習結果のパラメータをloadする 
 +model L.Classifier(MLP(1000,​ 10)) 
 +serializers.load_npz('​my_mnist.model'​ model)
  
-Trainerにつては、以下のスライドが非常参考になります。(といっても、私にはスライド内容の5%くらいか理解できていない気がします、、) +# 推測した画像を読みこんでNumpy配列変換し、chainerVariable変換 
- +# (詳細は後述) 
-Chainer ​の Trainer 解説と NStepLSTM ​ついて +x = chainer.Variable(image) 
-Published on Apr 11, 2017\\ +# chainer.links.Classifierのpredictorで推測 
-https://www.slideshare.net/​Retrieva_jp/​chainer-trainer-nsteplstm +y = model.predictor(x) 
- +predict ​np.argmax(y.data)
-==== Trainerを利用する場合のChainer全体図 ==== +
-「Trainerを利用する場合の全体図」 +
-(参考:Chainer v2による実践深層学習 新納浩幸 p54)+
  
 +print("​predict:"​ , predict)
 +</​code>​
  
 +もう一度、Trainerの構造を、今度はテキストで記載。
 <​code>​ <​code>​
-# train.py +Trainer 
-(1)#1 Chainerを使用するためのimport文+  ​|-Updater 
 +      |-Iterator 
 +          |-Dataset 
 +      |-Optimizer 
 +          |-Model 
 +  |-Extensions ​
  
-(2)#2 tuple_datasetによるデータの準備・設定+</​code>​ 
 +  ​
  
-(3)#3 モデルの記述 
-class MyModel(Chain):​ 
-    def __init__(self):​ 
-        super(MyModel,​ self).__init__( 
-        # パラメータを含む関数の宣言 
-    ) 
- 
-    def __call__(self,​ x,t): 
-       # モデルを記述 
- 
-(4)#4 モデルと最適化アルゴリズムの設定(ほぼお約束の3行) 
-model = MyModel() 
-optimizer = optimizers.Adam() 
-optimizer.setup(model) 
- 
-(5)#5 学習(Trainerを利用する場合) 
-iterator = iterators.SerialIterator(tdata,​ bsize) 
-updater = training.StandardUpdater(iterator,​ optimizer) 
-trainer = training.Trainer(updater,​ (ep, ‘epoch’)) 
-trainer.extend(extensions.ProgressBar()) 
- 
-trainer.run() 
- 
-(6)#6 結果の出力 
-</​code>​ 
  
 ==== Chainer2でMNISTのコード ==== ==== Chainer2でMNISTのコード ====
 以下にコードそのものを記載します。非常に長く取っつきにくいコードですが、次回以降、順に解説させていただきます。 以下にコードそのものを記載します。非常に長く取っつきにくいコードですが、次回以降、順に解説させていただきます。
 +
 +なお、今回はMNISTのデータセットを、Chainerがあらかじめ用意したものを使って学習を行いますが、画像データからChainer用データセットに変換する方法については、[[Chainer2用自前データの準備]]をご覧下さい。(かなりややこしいので、最初は、以下のコードを写経してから、自前データの準備に進むのがお勧めです。)
  
 train_mnist_mlp.py train_mnist_mlp.py
ライン 106: ライン 125:
 </​html>​ </​html>​
  
 +次のページから、上記コードについて順番に解説していきます。
  
 次 [[(1)Chainer2を使用するためのimport文]] 次 [[(1)Chainer2を使用するためのimport文]]
ライン 125: ライン 144:
 Chainerの基本的な使い方\\ Chainerの基本的な使い方\\
 https://​github.com/​dsanno/​deep-learning-study/​blob/​master/​doc/​chainer_basic.md https://​github.com/​dsanno/​deep-learning-study/​blob/​master/​doc/​chainer_basic.md
 +
 +Trainerについては、以下のスライドが非常に参考になります。(といっても、私にはスライド内容の5%くらいしか理解できていない気がします、、、)
 +
 +Chainer の Trainer 解説と NStepLSTM について
 +Published on Apr 11, 2017\\
 +https://​www.slideshare.net/​Retrieva_jp/​chainer-trainer-nsteplstm
  
 ===== 次節以降 ===== ===== 次節以降 =====
ライン 138: ライン 163:
 前 [[Chainer2.0をWindowsにインストール]] 前 [[Chainer2.0をWindowsにインストール]]
  
-目次 + 
-  -[[Chainer2.0をWindowsにインストール]] +<wrap hi>Chainer2でMNIST目次</​wrap>​\\ 
-  -[[Chainer2プログラミングの全体図]]+[[Chainer2プログラミングの全体図]]
   -[[(1)Chainer2を使用するためのimport文]]   -[[(1)Chainer2を使用するためのimport文]]
-  -[[(2)データの準備・設定]] +  -[[(2)データの準備・設定|(2)データの準備・設定(Chainer)]] 
-  -[[(3)モデルの記述]] +  -[[(3)モデルの記述|(3)モデルの記述(Chainer)]] 
-  -[[(4)モデルと最適化アルゴリズムの設定]] +  -[[(4)モデルと最適化アルゴリズムの設定|(4)モデルと最適化アルゴリズムの設定(Chainer)]] 
-  -[[(5)学習(Trainerを利用しない場合)]] +  -[[(5)学習と結果の出力(Chainer)]] 
-  -[[(6)結果の出力]] +  -[[(6)結果の出力|(6)学習結果のパラメータの保存(Chainer)]] 
-  -[[(7)推測]] +  -[[(7)推測|(7)推測(Chainer)]] 
-  ​-[[Chainer2機械学習成果をWEBで公開]]+ 

chainer2プログラミングの全体図.1509568741.txt.gz · 最終更新: 2018/10/07 (外部編集)