この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
| 
                    chainer2プログラミングの全体図 [2017/11/02] adash333 [Trainerを利用する場合のChainer全体図]  | 
                
                    chainer2プログラミングの全体図 [2018/10/07] (現在) | 
            ||
|---|---|---|---|
| ライン 1: | ライン 1: | ||
| ===== Chainerプログラミングの全体図 ===== | ===== Chainerプログラミングの全体図 ===== | ||
| + | <wrap hi>Chainer2でMNIST目次</wrap>\\ | ||
| [[Chainer2プログラミングの全体図]] | [[Chainer2プログラミングの全体図]] | ||
| -[[(1)Chainer2を使用するためのimport文]] | -[[(1)Chainer2を使用するためのimport文]] | ||
| ライン 11: | ライン 12: | ||
| - | 必ずしもこの書き方ではなくてもよいらしいです。 | + | あくまで一例として記載させていただきます。 | 
| WEB上のMNISTのサンプルコードを読んでいると、Kerasだと皆ほぼ同じコードになるのに、Chainerだと人によってコードが結構異なる感じで、初心者には本当にとっつきにくいイメージでした。 | WEB上のMNISTのサンプルコードを読んでいると、Kerasだと皆ほぼ同じコードになるのに、Chainerだと人によってコードが結構異なる感じで、初心者には本当にとっつきにくいイメージでした。 | ||
| ライン 28: | ライン 29: | ||
| {{:pasted:20171102-203705.png}} | {{:pasted:20171102-203705.png}} | ||
| - | 最初にこの図を見たときは何がなんだかさっぱりでしたが、この図をみながら、なんとなく、以下の全体図をざっと目を通して下さい。以後、具体的なコードを勉強するときに、『いま、全体図の中でどこのコードを書いているのか?』を把握しながら、自分の手でコードを写経して実行していくのがお勧めです。 | + | 私も最初にこの図を見たときは何がなんだかさっぱり分かりませんでしたが、この図をみながら、なんとなく、以下の全体図にざっと目を通して下さい。以後、具体的なコードを勉強するときに、『いま、全体図の中でどこのコードを書いているのか?』を把握しながら、Jupyter Notebookに自分の手でコードを写経して実行していくのがお勧めです。 | 
| ●Chainer2プログラミングの流れ | ●Chainer2プログラミングの流れ | ||
| ライン 43: | ライン 44: | ||
| 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, ...): | ||
| # モデルを記載 | # モデルを記載 | ||
| ライン 52: | ライン 52: | ||
| (4)#4 モデルと最適化アルゴリズムの設定 | (4)#4 モデルと最適化アルゴリズムの設定 | ||
| model = MyModel() | model = MyModel() | ||
| + | model = L.Classifier(model) | ||
| optimizer = optimizers.Adam() | optimizer = optimizers.Adam() | ||
| optimizer.setup(model) | optimizer.setup(model) | ||
| + | (5)#5 学習と結果の出力 | ||
| # UpdaterにIteratorとOptimizerを渡す | # UpdaterにIteratorとOptimizerを渡す | ||
| from chainer import training | from chainer import training | ||
| - | |||
| updater = training.StandardUpdater(train_iter, optimizer, device=gpu_id) | updater = training.StandardUpdater(train_iter, optimizer, device=gpu_id) | ||
| - | |||
| - | (5)#5 学習と結果の出力 | ||
| # TrainerにUpdaterを渡す | # TrainerにUpdaterを渡す | ||
| trainer = training.Trainer(updater, (max_epoch, 'epoch'), out='mnist_result') | trainer = training.Trainer(updater, (max_epoch, 'epoch'), out='mnist_result') | ||
| ライン 66: | ライン 65: | ||
| from chainer.training import extensions | from chainer.training import extensions | ||
| # trainer.extend()で、学習の進行状況を表すプログレスバーや、lossのグラフ化と画像の保存などを行う | # trainer.extend()で、学習の進行状況を表すプログレスバーや、lossのグラフ化と画像の保存などを行う | ||
| + | # 学習を実行 | ||
| trainer.run() | trainer.run() | ||
| ライン 77: | ライン 76: | ||
| import numpy as np | import numpy as np | ||
| import chainer import serializers | import chainer import serializers | ||
| - | |||
| # Network definition | # Network definition | ||
| # train.py と同じModelを定義 | # train.py と同じModelを定義 | ||
| - | |||
| # modelをClassifier化し、train.pyでの学習結果のパラメータをloadする | # modelをClassifier化し、train.pyでの学習結果のパラメータをloadする | ||
| model = L.Classifier(MLP(1000, 10)) | model = L.Classifier(MLP(1000, 10)) | ||
| ライン 111: | ライン 108: | ||
| ==== Chainer2でMNISTのコード ==== | ==== Chainer2でMNISTのコード ==== | ||
| 以下にコードそのものを記載します。非常に長く取っつきにくいコードですが、次回以降、順に解説させていただきます。 | 以下にコードそのものを記載します。非常に長く取っつきにくいコードですが、次回以降、順に解説させていただきます。 | ||
| + | |||
| + | なお、今回はMNISTのデータセットを、Chainerがあらかじめ用意したものを使って学習を行いますが、画像データからChainer用データセットに変換する方法については、[[Chainer2用自前データの準備]]をご覧下さい。(かなりややこしいので、最初は、以下のコードを写経してから、自前データの準備に進むのがお勧めです。) | ||
| train_mnist_mlp.py | train_mnist_mlp.py | ||
| ライン 126: | ライン 125: | ||
| </html> | </html> | ||
| + | 次のページから、上記コードについて順番に解説していきます。 | ||
| 次 [[(1)Chainer2を使用するためのimport文]] | 次 [[(1)Chainer2を使用するためのimport文]] | ||
| ライン 164: | ライン 163: | ||
| 前 [[Chainer2.0をWindowsにインストール]] | 前 [[Chainer2.0をWindowsにインストール]] | ||
| - | 目次 | + | |
| + | <wrap hi>Chainer2でMNIST目次</wrap>\\ | ||
| [[Chainer2プログラミングの全体図]] | [[Chainer2プログラミングの全体図]] | ||
| -[[(1)Chainer2を使用するためのimport文]] | -[[(1)Chainer2を使用するためのimport文]] | ||
| ライン 173: | ライン 173: | ||
| -[[(6)結果の出力|(6)学習結果のパラメータの保存(Chainer)]] | -[[(6)結果の出力|(6)学習結果のパラメータの保存(Chainer)]] | ||
| -[[(7)推測|(7)推測(Chainer)]] | -[[(7)推測|(7)推測(Chainer)]] | ||
| + | |||
| + | |||