LoginSignup
1
5

More than 5 years have passed since last update.

chainerの作法

Last updated at Posted at 2018-05-01

概要

chainerの作法を調べてみた。
分類。

インポート

import numpy as np
import chainer
from chainer import cuda, Function, gradient_check, report, training, utils, Variable
from chainer import datasets, iterators, optimizers, serializers
from chainer import Link, Chain, ChainList
import chainer.functions as F
import chainer.links as L
from chainer.training import extensions

訓練データセットのイテレーション

データは、np.array
基本は、Variableなので、datasetsを使って、np.arrayをVariableにする。
TupleDatasetは、分類で使う。ラベルは、1次で与える。int32。ohe_hotかは、不明。

def make_data():
    X = np.array([[0, 0], [1, 1], [0, 1], [1, 0]], dtype = np.float32)
    T = np.array([0, 0, 1, 1], dtype = np.int32)
    return chainer.datasets.TupleDataset(X, T)

test = make_data()
train = make_data()

ミニバッチに対する前処理

ミニバッチを使う為のiterators
trainerに、流し込む。

epoch = 500
batchsize = 4
train_iter = chainer.iterators.SerialIterator(train, batchsize)
test_iter = chainer.iterators.SerialIterator(test, batchsize, repeat = False, shuffle = False)

ニューラルネットワークのForward/backward計算

モデルをつくる。
マルチレイヤーパーセプトロンを構築。
Linerは、全結合。
分類なので、Classifierを使う。

class MLP(chainer.Chain):
    def __init__(self, n_units, n_out):
        super(MLP, self).__init__(l1 = L.Linear(None, n_units), l2 = L.Linear(None, n_out))
    def __call__(self, x):
        return self.l2(F.relu(self.l1(x)))

model = L.Classifier(MLP(8, 2))

パラメータの更新

オプチマイザーに、Adamを使う。
trainingでトレーニング。

optimizer = chainer.optimizers.Adam()
optimizer.setup(model)
updater = training.StandardUpdater(train_iter, optimizer)
trainer = training.Trainer(updater, (epoch, 'epoch'), out = 'result')
trainer.run()

評価データセットにおける現在のパラメータの評価

argmax使ってるので、one_hot?

x = np.array([[0, 0], [0, 1], [1, 0], [1, 1]], dtype = np.float32)
y = model.predictor(x).data
for i in range(4):
    print (x[i], np.argmax(y[i]), y[i])

中間結果をログに残す

プログレスバーを表示する。

trainer.extend(extensions.ProgressBar())

以上。

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5