目次
機械学習とは
プログラミング無しで機械学習
機械学習プログラミング入門
初めてのKeras2.0
- KerasでFineTuning(作成中)
 - pythonメモ(作成中)
 
以前のリビジョンの文書です
必ずしもこの書き方ではなくてもよいらしい。。。
WEB上のMNISTのサンプルコードを読んでいると、Kerasだと皆ほぼ同じコードになるのに、Chainerだと人によってコードが結構異なる感じで、初心者には本当にとっつきにくいイメージ。
Chainer 1.11.0から、Trainerというものが導入されたらしく、このサイトでは、Trainerを用いた記載方法のみ解説します。(筆者がTrainerを使用しないやり方を実行できなかったため。)
いきなり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 
Trainerについては、以下のスライドが非常に参考になります。(といっても、私にはスライド内容の5%くらいしか理解できていない気がします、、、)
Chainer の Trainer 解説と NStepLSTM について
Published on Apr 11, 2017
https://www.slideshare.net/Retrieva_jp/chainer-trainer-nsteplstm
「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 結果の出力
以下にコードそのものを記載します。非常に長く取っつきにくいコードですが、次回以降、順に解説させていただきます。
train_mnist_mlp.py
Predict_mnist_mlp.py
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プログラミングを理解する上で避けて通れないので、頑張ってやってみたいと思います。
目次