ChainerのTrainerが分からない...
この一週間, Docmentや他の紹介記事を見てChainerの使い方を勉強していたが
Trainerの使い方が意味不明…
試しに掛け算を学習させてみようと思い
入力データとして[1, 1], [1, 2], …, [9, 9]のVariableと
正解データとして[1], [2], …, [81]のVariableを用意してみた.
恐らくTrainerを使わずに実装するとあっさり動くんだろうけどなんとしてもTrainerを使ってみたい.
# -*- coding: utf-8 -*- import numpy as np import sys import chainer from chainer import cuda, Function, gradient_check, report from chainer import 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 class MyChain(Chain): def __init__(self, n_units, n_out): super(MyChain, self).__init__( l1=L.Linear(None, n_units), l2=L.Linear(None, n_units), l3=L.Linear(None, n_out), ) def __call__(self, x): h1 = F.relu(self.l1(x)) h2 = F.relu(self.l2(h1)) return F.relu(self.l3(h2)) def main(): is_gpu = True # CPUの場合はFalse xp = cuda.cupy if is_gpu else np batchsize = 3 model = MyChain(32, 1) # x_data : トレーニングデータ # t_data : 正解データ x_data = [] t_data = [] for i in range(1, 10): for j in range(1, 10): x_data.append(Variable(xp.array([i, j], dtype=xp.float32))) t_data.append(Variable(xp.array([i * j], dtype=xp.float32))) # 最適化 opt = optimizers.Adam() opt.use_cleargrads() opt.setup(model) train_iter = chainer.iterators.SerialIterator(x_data, batchsize) updater = training.StandardUpdater(train_iter, opt) trainer = training.Trainer(updater, (2000, 'epoch'), out='result') trainer.run() if __name__ == '__main__': main()
一度Trainer使わずやってみようかな.