文書の過去の版を表示しています。
Chainerプログラミングの全体図
必ずしもこの書き方ではなくてもよいらしい。。。
WEB上のMNISTのサンプルコードを読んでいると、Kerasだと皆ほぼ同じコードになるのに、Chainerだと人によってコードが結構異なる感じで、初心者には本当にとっつきにくいイメージ。
Chainer 1.11.0から、Trainerというものが導入されたらしく、このサイトでは、Trainerを用いた記載方法のみ解説します。(筆者がTrainerを使用しないやり方を実行できなかったため。)
Trainerを利用する場合のChainer全体図
いきなりTrainerと言われてもさっぱりだと思いますが、コードをコピペして1個ずつ理解するのみです!
Trainerの構造は、以下のようになっているらしいです。
(出典:Chainerビギナー向けチュートリアル Vol.1
)
最初にこの図を見たときは何がなんだかさっぱりでしたが、この図をみながら、なんとなく、以下のコードを写経して勉強していきたいと思います。
# ---------- train.py ---------- # (1)#1 Chainerを使用するためのimport文 (2)#2 データの準備・設定 from chainer import iterators # trainerを利用するために、Iteratorを定義してdatasetにアクセスできるようにする (3)#3 モデルの記述 class MyModel(Chain): def __init__(self): super(MyModel,self).__init__( # パラメータを含む関数の宣言 ) def __call__(self, ...): # モデルを記載 (4)#4 モデルと最適化アルゴリズムの設定 model = MyModel() optimizer = optimizers.Adam() optimizer.setup(model) # UpdaterにIteratorとOptimizerを渡す from chainer import training updater = training.StandardUpdater(train_iter, optimizer, device=gpu_id) (5)#5 学習と結果の出力 # TrainerにUpdaterを渡す trainer = training.Trainer(updater, (max_epoch, 'epoch'), out='mnist_result') # TrainerにExtensionを追加 from chainer.training import extensions # trainer.extend()で、学習の進行状況を表すプログレスバーや、lossのグラフ化と画像の保存などを行う trainer.run() (6)#6 学習結果のパラメータの保存 # Save paramaters chainer.serializers.save_npz('my_mnist.model', model) # ---------- predict.py ---------- # (7)#7 推測 import numpy as np import chainer import serializers # Network definition # train.py と同じModelを定義 model = MLP() serializers.load_npz('my_mnist.model' model) # 推測したい画像を読みこんでNumpy配列に変換し、chainerのVariableに変換 # (詳細は後述) x = chainer.Variable(image) # chainer.links.Classifierのpredictorで推測 y = model.predictor(x) predict = np.argmax(y.data) print("predict:" , predict)
もう一度、Trainerの構造を、今度はテキストで記載。
Trainer |-Updater |-Iterator |-Dataset |-Optimizer |-Model |-Extensions
Chainerプログラミングの全体図(2)Trainerを利用する場合
Trainerについては、以下のスライドが非常に参考になります。(といっても、私にはスライド内容の5%くらいしか理解できていない気がします、、、)
Chainer の Trainer 解説と NStepLSTM について
Published on Apr 11, 2017
https://www.slideshare.net/Retrieva_jp/chainer-trainer-nsteplstm
Trainerを利用する場合のChainer全体図
「Trainerを利用する場合の全体図」
(参考:Chainer v2による実践深層学習 新納浩幸 p54)
# train.py (1)#1 Chainerを使用するためのimport文 (2)#2 tuple_datasetによるデータの準備・設定 (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 結果の出力
Chainer2でMNISTのコード
以下にコードそのものを記載します。非常に長く取っつきにくいコードですが、次回以降、順に解説させていただきます。
train_mnist_mlp.py
<html>
<script src=“https://gist.github.com/adash333/cc498c292dcc36b55f320a41a4d4dcf0.js”></script>
</html>
Predict_mnist_mlp.py
<html>
<script src=“https://gist.github.com/adash333/1505e2625906aafdc95c36b05b9d5e75.js”></script>
</html>
参考文献
<html>
<iframe style=“width:120px;height:240px;” marginwidth=“0” marginheight=“0” scrolling=“no” frameborder=“0” src=“rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=twosquirrel-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B0765Z6216&linkId=49eb04597478fb1258ccd5505496e554”></iframe>
</html>
https://qiita.com/abechi_17/items/b271b7042fae126616d7
Chainer 2.0 のMNISTサンプルで推論を動かす
abechi_17
2017年07月01日に投稿
Chainer 2.0 のMNISTサンプル(公式Document)
https://github.com/chainer/chainer/tree/v2.0.0/examples/mnist
Chainerの基本的な使い方
https://github.com/dsanno/deep-learning-study/blob/master/doc/chainer_basic.md
===== 次節以降 =====
MNISTを例に、一つずつ解説させていただきたいと思います。
いつもあまり面白くないMNISTですが、Chainer2プログラミングを理解する上で避けて通れないので、頑張ってやってみたいと思います。
===== リンク =====
次 (1)Chainer2を使用するためのimport文
前 Chainer2.0をWindowsにインストール
目次
-Chainer2.0をWindowsにインストール
-Chainer2プログラミングの全体図
-(1)Chainer2を使用するためのimport文
-(2)データの準備・設定
-(3)モデルの記述
-(4)モデルと最適化アルゴリズムの設定
-(5)学習(Trainerを利用しない場合)
-(6)結果の出力
-(7)推測
-Chainer2機械学習成果をWEBで公開