※現在、ブログ記事を移行中のため一部表示が崩れる場合がございます。
順次修正対応にあたっておりますので何卒ご了承いただけますよう、お願い致します。
# 学習モデルの初期化
model = DigitsChain() # モデルの生成
optimizer = optimizers.SGD()
optimizer.setup(model)
# 学習ループ
for i in range(10000):
x = Variable(xtrain)
y = Variable(ytrain)
model.zerograds()
loss = model(x,y) # lossを求める (forward)
loss.backward() # 微分(backward)
optimizer.update() # 調整
# Testデータで学習成果を確認する
xt = Variable(xtest, volatile='on') # 学習不要
yy = model.fwd(xt)
ans = yy.data
nrow, ncol = ans.shape
ok = sum([np.argmax(ans[i,:])==yans[i] for i in range(nrow)])
print( ok, "/", nrow, " = ", (ok * 1.0)/nrow ) # 正解率
これって、Irisのときと同一に見えるはずだ。
たった1行違うだけ。
model = DigitsChain() # モデルの生成
つまり、粗い手書き文字用に作ったDigitsChainクラスのオブジェクトを作って、前と同じ変数modelに与えている。Chainer$ python3 digits0.py 546 / 599 = 0.911519198664 Chainer$