下記を参考にさせていただき、Chainerの入門的なサンプルコードを動作させたかったが、
Chainerのversionが変わりすぎてそのまま動かなかったのでメモ
http://studylog.hateblo.jp/entry/2015/08/27/225017
環境
Windows 10
Python 3.6.5
Chainer 4.2.0
コード
これで動いた
work1.py
#!/usr/bin/env python
# coding:utf-8
import numpy as np
import chainer
import chainer.links as L
import chainer.functions as F
from chainer import Variable, optimizers
class MyChain():
def __init__(self):
self.l = L.Linear(3, 3)
def __call__(self, x):
return self.l(x)
#モデルを作る
model = MyChain().l
optimizer = optimizers.SGD().setup(model)
optimizer.add_hook(chainer.optimizer_hooks.WeightDecay(0.0005))
#学習させる回数
times = 100
#与えるベクトル これが[2,4,6]になって返ってきて欲しい
x = Variable(np.array([[1, 2, 3]], dtype=np.float32))
#正解ベクトルの[2,4,6]
t = Variable(np.array([[2, 4, 6]], dtype=np.float32))
# ここから50回ループ
for i in range(0, times):
model.cleargrads()
# ここでモデルに予測させている
y = model(x)
# モデルが出した答えを表示
print(y.data)
# お馬鹿なモデルが出した答えと、本当の答え([2,4,6])がどのくらい違っているか計算する
loss = F.mean_squared_error(y, t)
# その値をモデルに見せて「全然違うじゃねーか!もっと近づけろ!」と学習させる
loss.backward()
optimizer.update()
# 最初に戻って繰り返す
数値はそれっぽいけど正しいコードになっているかわからない。。