提交 5b7edbde authored 作者: Frédéric Bastien's avatar Frédéric Bastien 提交者: GitHub

Merge pull request #5182 from mohammadpz/add_uint_test

uint16 added into _good_broadcast_binary_normal
...@@ -854,6 +854,14 @@ def upgrade_to_float(*types): ...@@ -854,6 +854,14 @@ def upgrade_to_float(*types):
for type in types])), for type in types])),
def upgrade_to_float64(*types):
"""
Upgrade any int and float32 to float64 to do as SciPy.
"""
return get_scalar_type('float64'),
def same_out(type): def same_out(type):
return type, return type,
......
...@@ -6,6 +6,7 @@ import numpy ...@@ -6,6 +6,7 @@ import numpy
import theano import theano
from theano.scalar.basic import (UnaryScalarOp, BinaryScalarOp, from theano.scalar.basic import (UnaryScalarOp, BinaryScalarOp,
exp, upgrade_to_float, exp, upgrade_to_float,
upgrade_to_float64,
float_types) float_types)
from theano.scalar.basic import (upgrade_to_float_no_complex, from theano.scalar.basic import (upgrade_to_float_no_complex,
complex_types, discrete_types, complex_types, discrete_types,
...@@ -369,7 +370,7 @@ class Chi2SF(BinaryScalarOp): ...@@ -369,7 +370,7 @@ class Chi2SF(BinaryScalarOp):
return Chi2SF.st_impl(x, k) return Chi2SF.st_impl(x, k)
else: else:
super(Chi2SF, self).impl(x, k) super(Chi2SF, self).impl(x, k)
chi2sf = Chi2SF(upgrade_to_float, name='chi2sf') chi2sf = Chi2SF(upgrade_to_float64, name='chi2sf')
class J1(UnaryScalarOp): class J1(UnaryScalarOp):
......
...@@ -16,7 +16,7 @@ from theano.tensor.nnet.sigm import ( ...@@ -16,7 +16,7 @@ from theano.tensor.nnet.sigm import (
compute_mul, is_1pexp, parse_mul_tree, perform_sigm_times_exp, compute_mul, is_1pexp, parse_mul_tree, perform_sigm_times_exp,
register_local_1msigmoid, simplify_mul, register_local_1msigmoid, simplify_mul,
) )
from theano.tensor.tests.test_basic import (makeBroadcastTester, from theano.tensor.tests.test_basic import (makeBroadcastTester, copymod,
check_floatX, upcast_int8_nfunc, check_floatX, upcast_int8_nfunc,
_good_broadcast_unary_normal_no_complex) _good_broadcast_unary_normal_no_complex)
...@@ -28,12 +28,14 @@ class T_sigmoid(unittest.TestCase): ...@@ -28,12 +28,14 @@ class T_sigmoid(unittest.TestCase):
def test_elemwise(self): def test_elemwise(self):
utt.verify_grad(sigmoid, [numpy.random.rand(3, 4)]) utt.verify_grad(sigmoid, [numpy.random.rand(3, 4)])
SigmoidTester = makeBroadcastTester( SigmoidTester = makeBroadcastTester(
op=sigmoid, op=sigmoid,
expected=upcast_int8_nfunc(lambda inputs: check_floatX( expected=upcast_int8_nfunc(lambda inputs: check_floatX(
inputs, 1 / (1 + numpy.exp(-inputs)))), inputs, 1 / (1 + numpy.exp(-inputs)))),
good=_good_broadcast_unary_normal_no_complex, good=copymod(_good_broadcast_unary_normal_no_complex,
without=['uint16']), # The reason that 'uint16' is excluted is that
# theano works well but numpy overflows resulting
# in an assertion error.
# grad=_grad_broadcast_unary_normal, # grad=_grad_broadcast_unary_normal,
name='SigmoidTester', name='SigmoidTester',
) )
...@@ -42,7 +44,8 @@ UltraFastSigmoidTester = makeBroadcastTester( ...@@ -42,7 +44,8 @@ UltraFastSigmoidTester = makeBroadcastTester(
op=ultra_fast_sigmoid, op=ultra_fast_sigmoid,
expected=upcast_int8_nfunc(lambda inputs: check_floatX( expected=upcast_int8_nfunc(lambda inputs: check_floatX(
inputs, 1 / (1 + numpy.exp(-inputs)))), inputs, 1 / (1 + numpy.exp(-inputs)))),
good=_good_broadcast_unary_normal_no_complex, good=copymod(_good_broadcast_unary_normal_no_complex,
without=['uint16']), # numpy fucnting overflows with uint16.
# grad=_grad_broadcast_unary_normal, # grad=_grad_broadcast_unary_normal,
name='UltraFastSigmoidTester', name='UltraFastSigmoidTester',
# This is an approx of the sigmoid. That is why we raise eps # This is an approx of the sigmoid. That is why we raise eps
...@@ -52,7 +55,8 @@ HardSigmoidTester = makeBroadcastTester( ...@@ -52,7 +55,8 @@ HardSigmoidTester = makeBroadcastTester(
op=hard_sigmoid, op=hard_sigmoid,
expected=upcast_int8_nfunc(lambda inputs: check_floatX( expected=upcast_int8_nfunc(lambda inputs: check_floatX(
inputs, 1 / (1 + numpy.exp(-inputs)))), inputs, 1 / (1 + numpy.exp(-inputs)))),
good=_good_broadcast_unary_normal_no_complex, good=copymod(_good_broadcast_unary_normal_no_complex,
without=['uint16']), # numpy fucnting overflows with uint16.
# grad=_grad_broadcast_unary_normal, # grad=_grad_broadcast_unary_normal,
name='HardSigmoidTester', name='HardSigmoidTester',
# This is an approx of the sigmoid. That is why we raise eps # This is an approx of the sigmoid. That is why we raise eps
...@@ -63,7 +67,9 @@ SoftplusTester = makeBroadcastTester( ...@@ -63,7 +67,9 @@ SoftplusTester = makeBroadcastTester(
op=softplus, op=softplus,
expected=upcast_int8_nfunc(lambda inputs: check_floatX( expected=upcast_int8_nfunc(lambda inputs: check_floatX(
inputs, numpy.log1p(numpy.exp(inputs)))), inputs, numpy.log1p(numpy.exp(inputs)))),
good=dict(_good_broadcast_unary_normal_no_complex, good=dict(copymod(_good_broadcast_unary_normal_no_complex,
without=['uint8', 'uint16']), # numpy fucnting overflows with uint16.
uint8=[numpy.arange(0, 89, dtype='uint8')], # the range is different in new added uint8.
int8=[numpy.arange(-127, 89, dtype='int8')]), int8=[numpy.arange(-127, 89, dtype='int8')]),
# grad=_grad_broadcast_unary_normal, # grad=_grad_broadcast_unary_normal,
name='SoftplusTester', name='SoftplusTester',
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论