LoginSignup
15
15

More than 5 years have passed since last update.

Pylearn2で学習モデルの検証を行う

Last updated at Posted at 2014-12-20

Pylearn2で学習したモデルとテストデータを使って検証を行う方法を説明します。

テストデータを読み込む

テストデータはpylearn2.datasetsモジュールから読み込む方法と、pklファイルを読み込む方法があります。
読み込んだあと、入力値はdata.X, 出力値はdata.yで参照できます。

pylearn2.datasetsモジュールからMNISTデータセットを読み込む場合:

from pylearn2.datasets import mnist

data = mnist.MNIST(which_set="train")

pklファイルを読み込む場合:

import pickle

data = pickle.load(open("path/to/test_dataset.pkl"))

モデルを読み込む

学習後のモデルはpklファイルになっており、それを読み込めばよいです。

import pickle

model= pickle.load(open("path/to/model.pkl"))

予測値を計算する

予測値を計算する関数を作ります。
モデルのfpropメソッドを使ってtheano関数を生成し、その関数に入力値を渡すことで予測値を得ることができます。
ただしfpropの入力とデータセットの入力とで空間が異なることがあるので、Space#format_asを使って変換を行います。
生成した関数は複数の入力値に対する予測値を一度に計算することができます。
予測値を複数回に分けて計算していますが、これは1度に計算するとメモリ不足になることがあるためです。
以下の関数ではinputsにデータセットのX、modelにモデルをとります。

import theano
from pylearn2.space import VectorSpace

...

def simulate(inputs, model):
    space = VectorSpace(inputs.shape[1])
    X = space.get_theano_batch()
    Y = model.fprop(space.format_as(X, model.get_input_space()))
    f = theano.function([X], Y)
    result = []
    batch_size = 100
    for x in xrange(0, len(inputs), batch_size):
      result.extend(f(inputs[x:x + batch_size]))
    return result

結果を集計する

統計分類の場合は以下のようにして集計することができます。
以下の関数のoutputsにはsimulateの戻り値、labelsにはデータセットのyを渡します。
numpyのargmaxを使って出力が最大となる要素を求め、データセットのyと比較します。

import numpy as np

...

def count_correct(outputs, labels):
    correct = 0;
    for output, label in zip(outputs, labels):
        if np.argmax(output) == label:
            correct += 1
    return correct

使用例

MNISTデータセットを使う場合の例を示します。

import pickle
from pylearn2.datasets import mnist

model = pickle.load(open("path/to/model.pkl"))
data = mnist.MNIST(which_set="test")

predicts = simulate(data.X, model)
correct = count_correct(predicts, data.y)
print "{} / {}".format(correct, len(data.X))

参考文献

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15