前回セーブしたものをロードして、ちゃんと動くか、脳の中身はちゃんと蘇るか確認してみよう。
saveの時と同じで、最初のおまじないのimportにつづいて、DigitsChainもimportしておく。
続いて、学習済みの ‘digitslearnt.pkl’ をモデルに読み込む。
データも ‘digitstestdata.pkl’ から読み込む。
このあたりは簡単過ぎて、説明することもないだろう。
from digitschain import DigitsChain
# 学習結果とTestデータをファイルから読み込む
import pickle
of = open('digitslearnt.pkl','rb')
model = pickle.load(of)
of.close()
of = open('digitstestdata.pkl','rb')
xtest,yans = pickle.load(of)
of.close()
ここまでで、前回セーブした時点の状態に戻ったはずである。
なので、ここから先は
Chainer:学習進行状況を確認しようで説明したのと同じコードで動作確認ができる。
# Testデータで学習成果を確認する
def check(data,answer,model):
xt = Variable(data, volatile='on') # 学習不要
yy = model.fwd(xt)
ans = yy.data
nrow, ncol = ans.shape
ok = sum([np.argmax(ans[i,:])==answer[i] for i in range(nrow)])
return (ok * 1.0)/nrow # 正解率
上記の内容を “digits0l.py” にまとめて書いて走らせると、こんな結果が得られた。
Chainer$ python digits0l.py
558 / 599 = 0.931552587646
Chainer$
“digits0l.py” : 学習結果とデータをロードしテスト
#!/usr/bin/env python
# from http://nlp.dse.ibaraki.ac.jp/~shinnou/book/chainer.tgz
import numpy as np
import chainer
from chainer import cuda, Function, gradient_check, Variable
from chainer import optimizers, serializers, utils
from chainer import Link, Chain, ChainList
import chainer.functions as F
import chainer.links as L
from digitschain import DigitsChain
# 学習結果とTestデータをファイルから読み込む
import pickle
of = open('digitslearnt.pkl','rb')
model = pickle.load(of)
of.close()
of = open('digitstestdata.pkl','rb')
xtest,yans = pickle.load(of)
of.close()
# 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 ) # 正解率