Chainer:学習結果(脳)をloadする


2017年 02月 27日

前回セーブしたものをロードして、ちゃんと動くか、脳の中身はちゃんと蘇るか確認してみよう。

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 )		# 正解率