chainer.testing.
unary_math_function_unittest
(func, func_expected=None,
label_expected=None, make_data=None)[source]¶
単行数学的な Chainer 関数テストのデコレータ。
このデコレータは単項の数学的な Chainer 関数をテストするクラスを作成します。パラメータ化された型( shape
と dtype
)で、CPU/GPU上の順方向と逆方向への演算がテストされます。
Parameters: |
|
---|
デコレートされたテストクラスは以下の parameterize()
関数処理されたパラメータでCPUとGPU上の順方向と逆方向への演算をテストします。
numpy.float16
, numpy.float32
and numpy.float64
加えて Chainer 関数のラベルをテストします。
デコレータでデコレートされたテストクラスによってテストされるChainer 関数は、下記のプロパティを持たなければなりません。
dtype
が同じ。
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
パラメータへ渡されます。