ユーザ用ツール

サイト用ツール


サイドバー

目次

機械学習とは

プログラミング無しで機械学習

機械学習プログラミング入門

初めてのKeras2.0

初めてのTensorflow(YouTube)

初めてのChainer2.0

初めてのビットコイン

ビットコイン用語集

初めてのSolidityプログラミング

初めての医療統計

初めてのエクセルで医療統計

初めてのEZRで医療統計

初めてのRStudioでレポート作成

スマホアプリ作成ソフトIonic3

スマホアプリ作成ソフトIonic4

Ionicのためのjavascript tips

その他

NiftyCloudMobileBackend

税金など

Dokuwiki

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

以前のリビジョンの文書です


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

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

必ずしもこの書き方ではなくてもよいらしい。。。

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

Predict_mnist_mlp.py

(1)Chainer2を使用するためのimport文

参考文献

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プログラミングを理解する上で避けて通れないので、頑張ってやってみたいと思います。

リンク

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