chainer.testing.unary_math_function_unittest(func, func_expected=None, label_expected=None, make_data=None)[source]

単行数学的な Chainer 関数テストのデコレータ。

 

このデコレータは単項の数学的な Chainer 関数をテストするクラスを作成します。パラメータ化された型( shape と dtype)で、CPU/GPU上の順方向と逆方向への演算がテストされます。

 

Parameters:
  • func (Function) – デコレートされたテストクラスにテストされるChainer関数。
  • func_expected – 順方向の演算をテストするための予測値を提供するのに用いられる関数。関数が指定されない場合、 func に対応するnumpy関数がそのクラス名によって暗に選ばれる。
  • label_expected (string) –  Chainer 関数の食べるをテストするために用いられる文字列。指定されない場合、func のクラス名を小文字にしたものが暗に用いられる。
  • make_data – テストで用いられる入力と勾配データをカスタマイズするための関数。 引数として shape と dtype をとり。入力と勾配データのタプルを返す。デフォルトでは、どちらの型の場合も [-1, 1] の範囲が指定された単一のディストリビューションが用いられる。

 

デコレートされたテストクラスは以下の parameterize() 関数処理されたパラメータでCPUとGPU上の順方向と逆方向への演算をテストします。

  • shape: 0もしくは0以上のランク
  • dtype: numpy.float16, numpy.float32 and numpy.float64

加えて Chainer 関数のラベルをテストします。

デコレータでデコレートされたテストクラスによってテストされるChainer 関数は、下記のプロパティを持たなければなりません。

  • 単項、1つのパラメータをとり、1つの値を返す。
  • 入力と出力のdtype が同じ。
  • 与えられている ndarrayの要素ごとの操作

Example

 

下記のコードはChainer関数 sin() をテストするテストクラスを定義しています。float型の dtype のパラメータをとり、 同じ dtypeの値を返します。

 


>>>
import unittest
>>> from chainer import testing
>>> from chainer import functions as F
>>>
>>> @testing.unary_math_function_unittest(F.Sin())
... class TestSin(unittest.TestCase):
... pass

 

このテストメソッドは、 TestSin クラスにデコレータによって明示的に注入されているので、 クラス定義中に pass をいれておけば充分です。

 

 

nose モジュールでテストを実行してみます。

 


>>>
import nose
>>> nose.run( ... defaultTest=__name__, argv=['', '-a', '!gpu'], exit=False)
True

 

 

テストデータをカスタマイズするため、オプショナル・パラメータ make_data を用いることができます。下記はChainer関数 sqrt のテスト例で、デフォルトの入力の代わりに正の値の領域をおいてテストしています。

 

>>> import numpy

>>>
>>> def make_data(shape, dtype):
... x = numpy.random.uniform(0.1, 1, shape).astype(dtype)
... gy = numpy.random.uniform(-1, 1, shape).astype(dtype)
... return x, gy
...
>>> @testing.unary_math_function_unittest(F.Sqrt(),
... make_data=make_data)
...
... class TestSqrt(unittest.TestCase):
... pass
...
>>> nose.run(
... defaultTest=__name__, argv=['', '-a', '!gpu'], exit=False)
True

 

このmake_data 関数は、与えられたshape と dtypeのパラメータを伴う適正値領域における入力と勾配データを返します。この関数が、定義され、デコレータのmake_data パラメータへ渡されます。