提交 5626a476 authored 作者: nouiz's avatar nouiz

Merge pull request #674 from bouchnic/new_elemwise

New elemwise
...@@ -1944,6 +1944,25 @@ class Exp(UnaryScalarOp): ...@@ -1944,6 +1944,25 @@ class Exp(UnaryScalarOp):
exp = Exp(upgrade_to_float, name='exp') exp = Exp(upgrade_to_float, name='exp')
class Exp2(UnaryScalarOp):
def impl(self, x):
return numpy.exp2(x)
def grad(self, (x, ), (gz, )):
if x.type in complex_types:
raise NotImplementedError()
elif x.type in float_types:
return gz * exp2(x) * log(numpy.cast[x.type](2)),
else:
return None,
def c_code(self, node, name, (x, ), (z, ), sub):
if node.inputs[0].type in complex_types:
raise NotImplementedError('type not supported', type)
return "%(z)s = exp2(%(x)s);" % locals()
exp2 = Exp2(upgrade_to_float, name='exp2')
class Sqr(UnaryScalarOp): class Sqr(UnaryScalarOp):
def impl(self, x): def impl(self, x):
return x * x return x * x
...@@ -1999,7 +2018,7 @@ class Cos(UnaryScalarOp): ...@@ -1999,7 +2018,7 @@ class Cos(UnaryScalarOp):
cos = Cos(upgrade_to_float, name='cos') cos = Cos(upgrade_to_float, name='cos')
class Arccos(UnaryScalarOp): class ArcCos(UnaryScalarOp):
def impl(self, x): def impl(self, x):
return numpy.arccos(x) return numpy.arccos(x)
...@@ -2015,7 +2034,7 @@ class Arccos(UnaryScalarOp): ...@@ -2015,7 +2034,7 @@ class Arccos(UnaryScalarOp):
if node.inputs[0].type in complex_types: if node.inputs[0].type in complex_types:
raise NotImplementedError('type not supported', type) raise NotImplementedError('type not supported', type)
return "%(z)s = acos(%(x)s);" % locals() return "%(z)s = acos(%(x)s);" % locals()
arccos = Arccos(upgrade_to_float, name='arccos') arccos = ArcCos(upgrade_to_float, name='arccos')
class Sin(UnaryScalarOp): class Sin(UnaryScalarOp):
...@@ -2037,6 +2056,25 @@ class Sin(UnaryScalarOp): ...@@ -2037,6 +2056,25 @@ class Sin(UnaryScalarOp):
sin = Sin(upgrade_to_float, name='sin') sin = Sin(upgrade_to_float, name='sin')
class ArcSin(UnaryScalarOp):
def impl(self, x):
return numpy.arcsin(x)
def grad(self, (x,), (gz,)):
if gz.type in complex_types:
raise NotImplementedError()
if x.type in float_types:
return gz / sqrt(numpy.cast[x.type](1) - sqr(x)),
else:
return None,
def c_code(self, node, name, (x,), (z,), sub):
if node.inputs[0].type in complex_types:
raise NotImplementedError('type not supported', type)
return "%(z)s = asin(%(x)s);" % locals()
arcsin = ArcSin(upgrade_to_float, name='arcsin')
class Tan(UnaryScalarOp): class Tan(UnaryScalarOp):
def impl(self, x): def impl(self, x):
return numpy.tan(x) return numpy.tan(x)
...@@ -2056,6 +2094,46 @@ class Tan(UnaryScalarOp): ...@@ -2056,6 +2094,46 @@ class Tan(UnaryScalarOp):
tan = Tan(upgrade_to_float, name='tan') tan = Tan(upgrade_to_float, name='tan')
class ArcTan(UnaryScalarOp):
def impl(self, x):
return numpy.arctan(x)
def grad(self, (x,), (gz,)):
if gz.type in complex_types:
raise NotImplementedError()
if x.type in float_types:
return gz / (numpy.cast[x.type](1) + sqr(x)),
else:
return None,
def c_code(self, node, name, (x,), (z,), sub):
if node.inputs[0].type in complex_types:
raise NotImplementedError('type not supported', type)
return "%(z)s = atan(%(x)s);" % locals()
arctan = ArcTan(upgrade_to_float, name='arctan')
class ArcTan2(BinaryScalarOp):
def impl(self, y, x):
return numpy.arctan2(y, x)
def grad(self, (y, x), (gz,)):
if gz.type in complex_types:
raise NotImplementedError()
if x.type in float_types and y.type in float_types:
return [gz * x / (sqr(x) + sqr(y)),
gz * neg(y) / (sqr(x) + sqr(y))]
else:
return None,
def c_code(self, node, name, (y, x), (z,), sub):
if (node.inputs[0].type in complex_types or
node.inputs[1].type in complex_types):
raise NotImplementedError('type not supported', type)
return "%(z)s = atan2(%(y)s, %(x)s);" % locals()
arctan2 = ArcTan2(upgrade_to_float, name='arctan2')
class Cosh(UnaryScalarOp): class Cosh(UnaryScalarOp):
""" """
cosh(x) = (exp(x) + exp(-x)) / 2 cosh(x) = (exp(x) + exp(-x)) / 2
...@@ -2078,6 +2156,25 @@ class Cosh(UnaryScalarOp): ...@@ -2078,6 +2156,25 @@ class Cosh(UnaryScalarOp):
cosh = Cosh(upgrade_to_float, name='cosh') cosh = Cosh(upgrade_to_float, name='cosh')
class ArcCosh(UnaryScalarOp):
def impl(self, x):
return numpy.arccosh(x)
def grad(self, (x, ), (gz, )):
if x.type in complex_types:
raise NotImplementedError()
if x.type in float_types:
return gz / sqrt(sqr(x) - numpy.cast[x.type](1)),
else:
return None,
def c_code(self, node, name, (x, ), (z, ), sub):
if node.inputs[0].type in complex_types:
raise NotImplementedError('type not supported', type)
return "%(z)s = acosh(%(x)s);" % locals()
arccosh = ArcCosh(upgrade_to_float, name='arccosh')
class Sinh(UnaryScalarOp): class Sinh(UnaryScalarOp):
""" """
sinh(x) = (exp(x) - exp(-x)) / 2 sinh(x) = (exp(x) - exp(-x)) / 2
...@@ -2100,6 +2197,25 @@ class Sinh(UnaryScalarOp): ...@@ -2100,6 +2197,25 @@ class Sinh(UnaryScalarOp):
sinh = Sinh(upgrade_to_float, name='sinh') sinh = Sinh(upgrade_to_float, name='sinh')
class ArcSinh(UnaryScalarOp):
def impl(self, x):
return numpy.arcsinh(x)
def grad(self, (x, ), (gz, )):
if x.type in complex_types:
raise NotImplementedError()
if x.type in float_types:
return gz / sqrt(sqr(x) + numpy.cast[x.type](1)),
else:
return None,
def c_code(self, node, name, (x, ), (z, ), sub):
if node.inputs[0].type in complex_types:
raise NotImplementedError('type not supported', type)
return "%(z)s = asinh(%(x)s);" % locals()
arcsinh = ArcSinh(upgrade_to_float, name='arcsinh')
class Tanh(UnaryScalarOp): class Tanh(UnaryScalarOp):
""" """
tanh(x) = sinh(x) / cosh(x) tanh(x) = sinh(x) / cosh(x)
...@@ -2123,6 +2239,25 @@ class Tanh(UnaryScalarOp): ...@@ -2123,6 +2239,25 @@ class Tanh(UnaryScalarOp):
tanh = Tanh(upgrade_to_float, name='tanh') tanh = Tanh(upgrade_to_float, name='tanh')
class ArcTanh(UnaryScalarOp):
def impl(self, x):
return numpy.arctanh(x)
def grad(self, (x, ), (gz, )):
if x.type in complex_types:
raise NotImplementedError()
if x.type in float_types:
return gz / (numpy.cast[x.type](1) -sqr(x)),
else:
return None,
def c_code(self, node, name, (x, ), (z, ), sub):
if node.inputs[0].type in complex_types:
raise NotImplementedError('type not supported', type)
return "%(z)s = atanh(%(x)s);" % locals()
arctanh = ArcTanh(upgrade_to_float, name='arctanh')
class Real(UnaryScalarOp): class Real(UnaryScalarOp):
"""Extract the real coordinate of a complex number. """ """Extract the real coordinate of a complex number. """
def impl(self, x): def impl(self, x):
......
...@@ -2476,6 +2476,11 @@ def exp(a): ...@@ -2476,6 +2476,11 @@ def exp(a):
"""e^`a`""" """e^`a`"""
@_scal_elemwise_with_nfunc('exp2', 1, 1)
def exp2(a):
"""2^`a`"""
@_scal_elemwise_with_nfunc('negative', 1, 1) @_scal_elemwise_with_nfunc('negative', 1, 1)
def neg(a): def neg(a):
"""-a""" """-a"""
...@@ -2575,26 +2580,56 @@ def sin(a): ...@@ -2575,26 +2580,56 @@ def sin(a):
"""sine of a""" """sine of a"""
@_scal_elemwise_with_nfunc('arcsin', 1, 1)
def arcsin(a):
"""arcsine of a"""
@_scal_elemwise_with_nfunc('tan', 1, 1) @_scal_elemwise_with_nfunc('tan', 1, 1)
def tan(a): def tan(a):
"""tangent of a""" """tangent of a"""
@_scal_elemwise_with_nfunc('arctan', 1, 1)
def arctan(a):
"""arctangent of a"""
@_scal_elemwise_with_nfunc('arctan2', 1, 1)
def arctan2(a, b):
"""arctangent of a / b"""
@_scal_elemwise_with_nfunc('cosh', 1, 1) @_scal_elemwise_with_nfunc('cosh', 1, 1)
def cosh(a): def cosh(a):
"""hyperbolic cosine of a""" """hyperbolic cosine of a"""
@_scal_elemwise_with_nfunc('arccosh', 1, 1)
def arccosh(a):
"""hyperbolic arc cosine of a"""
@_scal_elemwise_with_nfunc('sinh', 1, 1) @_scal_elemwise_with_nfunc('sinh', 1, 1)
def sinh(a): def sinh(a):
"""hyperbolic sine of a""" """hyperbolic sine of a"""
@_scal_elemwise_with_nfunc('arcsinh', 1, 1)
def arcsinh(a):
"""hyperbolic arc sine of a"""
@_scal_elemwise_with_nfunc('tanh', 1, 1) @_scal_elemwise_with_nfunc('tanh', 1, 1)
def tanh(a): def tanh(a):
"""hyperbolic tangent of a""" """hyperbolic tangent of a"""
@_scal_elemwise_with_nfunc('arctanh', 1, 1)
def arctanh(a):
"""hyperbolic arc tangent of a"""
@_scal_elemwise @_scal_elemwise
def erf(a): def erf(a):
"""error function""" """error function"""
......
from basic import _scal_elemwise #, _transpose_inplace from basic import _scal_elemwise #, _transpose_inplace
from theano import scalar as scal from theano import scalar as scal
import elemwise import elemwise
...@@ -88,6 +87,10 @@ def abs__inplace(a): ...@@ -88,6 +87,10 @@ def abs__inplace(a):
def exp_inplace(a): def exp_inplace(a):
"""e^`a` (inplace on `a`)""" """e^`a` (inplace on `a`)"""
@_scal_inplace
def exp2_inplace(a):
"""2^`a` (inplace on `a`)"""
@_scal_inplace @_scal_inplace
def neg_inplace(a): def neg_inplace(a):
"""-a (inplace on a)""" """-a (inplace on a)"""
...@@ -152,22 +155,46 @@ def arccos_inplace(a): ...@@ -152,22 +155,46 @@ def arccos_inplace(a):
def sin_inplace(a): def sin_inplace(a):
"""sine of `a` (inplace on `a`)""" """sine of `a` (inplace on `a`)"""
@_scal_inplace
def arcsin_inplace(a):
"""arcsine of `a` (inplace on `a`)"""
@_scal_inplace @_scal_inplace
def tan_inplace(a): def tan_inplace(a):
"""tangent of `a` (inplace on `a`)""" """tangent of `a` (inplace on `a`)"""
@_scal_inplace
def arctan_inplace(a):
"""arctangent of `a` (inplace on `a`)"""
@_scal_inplace
def arctan2_inplace(a, b):
"""arctangent of `a` / `b` (inplace on `a`)"""
@_scal_inplace @_scal_inplace
def cosh_inplace(a): def cosh_inplace(a):
"""hyperbolic cosine of `a` (inplace on `a`)""" """hyperbolic cosine of `a` (inplace on `a`)"""
@_scal_inplace
def arccosh_inplace(a):
"""hyperbolic arc cosine of `a` (inplace on `a`)"""
@_scal_inplace @_scal_inplace
def sinh_inplace(a): def sinh_inplace(a):
"""hyperbolic sine of `a` (inplace on `a`)""" """hyperbolic sine of `a` (inplace on `a`)"""
@_scal_inplace
def arcsinh_inplace(a):
"""hyperbolic arc sine of `a` (inplace on `a`)"""
@_scal_inplace @_scal_inplace
def tanh_inplace(a): def tanh_inplace(a):
"""hyperbolic tangent of `a` (inplace on `a`)""" """hyperbolic tangent of `a` (inplace on `a`)"""
@_scal_inplace
def arctanh_inplace(a):
"""hyperbolic arc tangent of `a` (inplace on `a`)"""
@_scal_inplace @_scal_inplace
def erf_inplace(a): def erf_inplace(a):
"""error function""" """error function"""
......
...@@ -908,214 +908,317 @@ FloorInplaceTester = makeBroadcastTester(op=inplace.floor_inplace, ...@@ -908,214 +908,317 @@ FloorInplaceTester = makeBroadcastTester(op=inplace.floor_inplace,
expected=lambda a: numpy.asarray(numpy.floor(a), a.dtype), expected=lambda a: numpy.asarray(numpy.floor(a), a.dtype),
good=_good_broadcast_unary_normal_no_complex, good=_good_broadcast_unary_normal_no_complex,
grad=_grad_broadcast_unary_normal, grad=_grad_broadcast_unary_normal,
inplace = True) inplace=True)
RoundHalfToEvenTester = makeBroadcastTester(op = tensor.round_half_to_even, RoundHalfToEvenTester = makeBroadcastTester(
expected = numpy.round, op=tensor.round_half_to_even,
good = _good_broadcast_unary_normal_float_no_complex) expected=numpy.round,
good=_good_broadcast_unary_normal_float_no_complex)
# TODO: Why complex are accepted in the next one? # TODO: Why complex are accepted in the next one?
RoundHalfToEvenInplaceTester = makeBroadcastTester(op = inplace.round_half_to_even_inplace, RoundHalfToEvenInplaceTester = makeBroadcastTester(
expected = numpy.round, op=inplace.round_half_to_even_inplace,
good = _good_broadcast_unary_normal_float, expected=numpy.round,
inplace = True) good=_good_broadcast_unary_normal_float,
inplace=True)
#numpy.vectorize don't handle correctly empty ndarray. #numpy.vectorize don't handle correctly empty ndarray.
#see in their file numpy/lib/function_base.py in class vectorize.__call__ #see in their file numpy/lib/function_base.py in class vectorize.__call__
#This happen in float32 mode. #This happen in float32 mode.
RoundHalfAwayFromZeroTester = makeBroadcastTester(op = tensor.round_half_away_from_zero, RoundHalfAwayFromZeroTester = makeBroadcastTester(
expected = theano.scalar.basic.round_half_away_from_zero_vec, op=tensor.round_half_away_from_zero,
good = _good_broadcast_unary_normal_float_no_empty_no_complex)#_good_broadcast_unary_normal_float) expected=theano.scalar.basic.round_half_away_from_zero_vec,
RoundHalfAwayFromZeroInplaceTester = makeBroadcastTester(op = inplace.round_half_away_from_zero_inplace, good=_good_broadcast_unary_normal_float_no_empty_no_complex)
expected = theano.scalar.basic.round_half_away_from_zero_vec, #_good_broadcast_unary_normal_float)
good = _good_broadcast_unary_normal_float_no_empty_no_complex, RoundHalfAwayFromZeroInplaceTester = makeBroadcastTester(
inplace = True) op=inplace.round_half_away_from_zero_inplace,
expected=theano.scalar.basic.round_half_away_from_zero_vec,
SqrTester = makeBroadcastTester(op = tensor.sqr, good=_good_broadcast_unary_normal_float_no_empty_no_complex,
expected = numpy.square, inplace=True)
good = _good_broadcast_unary_normal,
grad = _grad_broadcast_unary_normal)
SqrInplaceTester = makeBroadcastTester(op = inplace.sqr_inplace,
expected = numpy.square,
good = _good_broadcast_unary_normal,
grad = _grad_broadcast_unary_normal,
inplace = True)
ExpTester = makeBroadcastTester(op = tensor.exp,
expected = numpy.exp,
good = _good_broadcast_unary_normal,
grad = _grad_broadcast_unary_normal)
ExpInplaceTester = makeBroadcastTester(op = inplace.exp_inplace,
expected = numpy.exp,
good = _good_broadcast_unary_normal,
grad = _grad_broadcast_unary_normal,
inplace = True)
_good_broadcast_unary_positive = dict(normal = (rand_ranged(0.001, 5, (2, 3)),),
integers = (randint_ranged(1, 5, (2, 3)),),
complex = (randc128_ranged(1, 5, (2,3)),),
empty = (numpy.asarray([]),),
)
_grad_broadcast_unary_positive = dict(normal = (rand_ranged(0.001, 5, (2, 3)),), SqrTester = makeBroadcastTester(op=tensor.sqr,
#complex = (randc128_ranged(1, 5, (2,3)),), expected=numpy.square,
#empty = (numpy.asarray([]),), good=_good_broadcast_unary_normal,
grad=_grad_broadcast_unary_normal)
SqrInplaceTester = makeBroadcastTester(op=inplace.sqr_inplace,
expected=numpy.square,
good=_good_broadcast_unary_normal,
grad=_grad_broadcast_unary_normal,
inplace=True)
ExpTester = makeBroadcastTester(op=tensor.exp,
expected=numpy.exp,
good=_good_broadcast_unary_normal,
grad=_grad_broadcast_unary_normal)
ExpInplaceTester = makeBroadcastTester(op=inplace.exp_inplace,
expected=numpy.exp,
good=_good_broadcast_unary_normal,
grad=_grad_broadcast_unary_normal,
inplace=True)
Exp2Tester = makeBroadcastTester(op=tensor.exp2,
expected=numpy.exp2,
good=_good_broadcast_unary_normal,
grad=_grad_broadcast_unary_normal)
Exp2InplaceTester = makeBroadcastTester(op=inplace.exp2_inplace,
expected=numpy.exp2,
good=_good_broadcast_unary_normal,
grad=_grad_broadcast_unary_normal,
inplace=True)
_good_broadcast_unary_positive = dict(normal=(rand_ranged(0.001, 5, (2, 3)),),
integers=(randint_ranged(1, 5, (2, 3)),),
complex=(randc128_ranged(1, 5, (2, 3)),),
empty=(numpy.asarray([]),),
) )
LogTester = makeBroadcastTester(op = tensor.log, _grad_broadcast_unary_positive = dict(normal=(rand_ranged(0.001, 5, (2, 3)),),)
expected = numpy.log,
good = _good_broadcast_unary_positive, LogTester = makeBroadcastTester(op=tensor.log,
grad = _grad_broadcast_unary_positive) expected=numpy.log,
LogInplaceTester = makeBroadcastTester(op = inplace.log_inplace, good=_good_broadcast_unary_positive,
expected = numpy.log, grad=_grad_broadcast_unary_positive)
good = _good_broadcast_unary_positive, LogInplaceTester = makeBroadcastTester(op=inplace.log_inplace,
grad = _grad_broadcast_unary_positive, expected=numpy.log,
inplace = True) good=_good_broadcast_unary_positive,
grad=_grad_broadcast_unary_positive,
Log2Tester = makeBroadcastTester(op = tensor.log2, inplace=True)
expected = numpy.log2,
good = _good_broadcast_unary_positive, Log2Tester = makeBroadcastTester(op=tensor.log2,
grad = _grad_broadcast_unary_positive) expected=numpy.log2,
Log2InplaceTester = makeBroadcastTester(op = inplace.log2_inplace, good=_good_broadcast_unary_positive,
expected = numpy.log2, grad=_grad_broadcast_unary_positive)
good = _good_broadcast_unary_positive, Log2InplaceTester = makeBroadcastTester(op=inplace.log2_inplace,
grad = _grad_broadcast_unary_positive, expected=numpy.log2,
inplace = True) good=_good_broadcast_unary_positive,
grad=_grad_broadcast_unary_positive,
Log10Tester = makeBroadcastTester(op = tensor.log10, inplace=True)
expected = numpy.log10,
good = _good_broadcast_unary_positive, Log10Tester = makeBroadcastTester(op=tensor.log10,
grad = _grad_broadcast_unary_positive) expected=numpy.log10,
Log10InplaceTester = makeBroadcastTester(op = inplace.log10_inplace, good=_good_broadcast_unary_positive,
expected = numpy.log10, grad=_grad_broadcast_unary_positive)
good = _good_broadcast_unary_positive, Log10InplaceTester = makeBroadcastTester(op=inplace.log10_inplace,
grad = _grad_broadcast_unary_positive, expected=numpy.log10,
inplace = True) good=_good_broadcast_unary_positive,
grad=_grad_broadcast_unary_positive,
Log1pTester = makeBroadcastTester(op = tensor.log1p, inplace=True)
expected = numpy.log1p,
good = _good_broadcast_unary_positive, Log1pTester = makeBroadcastTester(op=tensor.log1p,
grad = _grad_broadcast_unary_positive) expected=numpy.log1p,
Log1pInplaceTester = makeBroadcastTester(op = inplace.log1p_inplace, good=_good_broadcast_unary_positive,
expected = numpy.log1p, grad=_grad_broadcast_unary_positive)
good = _good_broadcast_unary_positive, Log1pInplaceTester = makeBroadcastTester(op=inplace.log1p_inplace,
grad = _grad_broadcast_unary_positive, expected=numpy.log1p,
inplace = True) good=_good_broadcast_unary_positive,
grad=_grad_broadcast_unary_positive,
inplace=True)
SqrtTester = makeBroadcastTester(op = tensor.sqrt,
expected = numpy.sqrt, SqrtTester = makeBroadcastTester(op=tensor.sqrt,
good = _good_broadcast_unary_positive, expected=numpy.sqrt,
grad = _grad_broadcast_unary_positive) good=_good_broadcast_unary_positive,
SqrtInplaceTester = makeBroadcastTester(op = inplace.sqrt_inplace, grad=_grad_broadcast_unary_positive)
expected = numpy.sqrt, SqrtInplaceTester = makeBroadcastTester(op=inplace.sqrt_inplace,
good = _good_broadcast_unary_positive, expected=numpy.sqrt,
grad = _grad_broadcast_unary_positive, good=_good_broadcast_unary_positive,
inplace = True) grad=_grad_broadcast_unary_positive,
inplace=True)
_good_broadcast_unary_wide = dict(
_good_broadcast_unary_wide = dict(normal = (rand_ranged(-1000, 1000, (2, 3)),), normal=(rand_ranged(-1000, 1000, (2, 3)),),
integers = (randint_ranged(-1000, 1000, (2, 3)),), integers=(randint_ranged(-1000, 1000, (2, 3)),),
complex = (randc128_ranged(-1000, 1000, (2, 3)),), complex=(randc128_ranged(-1000, 1000, (2, 3)),),
empty = (numpy.asarray([]),),) empty=(numpy.asarray([]),),)
_grad_broadcast_unary_wide = dict(normal=(rand_ranged(-1000, 1000, (2, 3)),),)
_grad_broadcast_unary_wide = dict(normal = (rand_ranged(-1000, 1000, (2, 3)),),
#complex = (randc128_ranged(-1000, 1000, (2, 3)),), SinTester = makeBroadcastTester(op=tensor.sin,
#empty = (numpy.asarray([]),), expected=numpy.sin,
) good=_good_broadcast_unary_wide,
grad=_grad_broadcast_unary_wide)
_good_broadcast_unary_arccos = dict(normal = (rand_ranged(-1.+1e-7, 1.-1e-7, (2, 3)),), SinInplaceTester = makeBroadcastTester(op=inplace.sin_inplace,
integers = (randint_ranged(-1.+1e-7, 1-1e-7, (2, 3)),), expected=numpy.sin,
complex = (randc128_ranged(-1.+1e-7, 1-1e-7, (2, 3)),), good=_good_broadcast_unary_wide,
empty = (numpy.asarray([]),),) grad=_grad_broadcast_unary_wide,
inplace=True)
_grad_broadcast_unary_arccos = dict(normal = (rand_ranged(-1.+1e-7, 1-1e-7, (2, 3)),),
#complex = (randc128_ranged(-1000, 1000, (2, 3)),), _good_broadcast_unary_arcsin = dict(normal=(rand_ranged(-1, 1, (2, 3)),),
#empty = (numpy.asarray([]),), integers=(randint_ranged(-1, 1, (2, 3)),),
) complex=(randc128_ranged(-1, 1, (2, 3)),),
empty=(numpy.asarray([]),),)
_grad_broadcast_unary_arcsin = dict(normal=(rand_ranged(-1, 1, (2, 3)),),)
SinTester = makeBroadcastTester(op = tensor.sin,
expected = numpy.sin, ArcSinTester = makeBroadcastTester(op=tensor.arcsin,
good = _good_broadcast_unary_wide, expected=numpy.arcsin,
grad = _grad_broadcast_unary_wide) good=_good_broadcast_unary_arcsin,
SinInplaceTester = makeBroadcastTester(op = inplace.sin_inplace, grad=_grad_broadcast_unary_arcsin)
expected = numpy.sin, ArcSinInplaceTester = makeBroadcastTester(op=inplace.arcsin_inplace,
good = _good_broadcast_unary_wide, expected=numpy.arcsin,
grad = _grad_broadcast_unary_wide, good=_good_broadcast_unary_arcsin,
inplace = True) grad=_grad_broadcast_unary_arcsin,
inplace=True)
CosTester = makeBroadcastTester(op = tensor.cos,
expected = numpy.cos, CosTester = makeBroadcastTester(op=tensor.cos,
good = _good_broadcast_unary_wide, expected=numpy.cos,
grad = _grad_broadcast_unary_wide) good=_good_broadcast_unary_wide,
CosInplaceTester = makeBroadcastTester(op = inplace.cos_inplace, grad=_grad_broadcast_unary_wide)
expected = numpy.cos, CosInplaceTester = makeBroadcastTester(op=inplace.cos_inplace,
good = _good_broadcast_unary_wide, expected=numpy.cos,
grad = _grad_broadcast_unary_wide, good=_good_broadcast_unary_wide,
inplace = True) grad=_grad_broadcast_unary_wide,
ArccosTester = makeBroadcastTester(op = tensor.arccos, inplace=True)
expected = numpy.arccos,
good = _good_broadcast_unary_arccos, ArcCosTester = makeBroadcastTester(op=tensor.arccos,
grad = _grad_broadcast_unary_arccos) expected=numpy.arccos,
ArccosInplaceTester = makeBroadcastTester(op = inplace.arccos_inplace, good=_good_broadcast_unary_arcsin,
expected = numpy.arccos, grad=_grad_broadcast_unary_arcsin)
good = _good_broadcast_unary_arccos, ArcCosInplaceTester = makeBroadcastTester(op=inplace.arccos_inplace,
grad = _grad_broadcast_unary_arccos, expected=numpy.arccos,
inplace = True) good=_good_broadcast_unary_arcsin,
grad=_grad_broadcast_unary_arcsin,
inplace=True)
tan_grad_rtol = None tan_grad_rtol = None
if config.floatX=='float32': if config.floatX == 'float32':
#We raise the relative tolerence for the grad as their is error in float32 #We raise the relative tolerence for the grad as their is error in float32
#This is probably caused by our way of computing the gradient error. #This is probably caused by our way of computing the gradient error.
tan_grad_rtol = 0.052 tan_grad_rtol = 0.052
TanTester = makeBroadcastTester(op = tensor.tan,
expected = numpy.tan,
good = dict(normal = (rand_ranged(-3.14, 3.14, (2, 3)),),
shifted = (rand_ranged(3.15, 6.28, (2, 3)),)),
grad = dict(normal = (rand_ranged(-3.14, 3.14, (2, 3)),),
shifted = (rand_ranged(3.15, 6.28, (2, 3)),)),
grad_rtol=tan_grad_rtol)
TanInplaceTester = makeBroadcastTester(op = inplace.tan_inplace,
expected = numpy.tan,
good = dict(normal = (rand_ranged(-3.14, 3.14, (2, 3)),),
shifted = (rand_ranged(3.15, 6.28, (2, 3)),)),
grad = dict(normal = (rand_ranged(-3.14, 3.14, (2, 3)),),
shifted = (rand_ranged(3.15, 6.28, (2, 3)),)),
grad_rtol=tan_grad_rtol,
inplace = True)
_good_broadcast_unary_tan = dict(
normal=(rand_ranged(-3.14, 3.14, (2, 3)),),
shifted=(rand_ranged(3.15, 6.28, (2, 3)),),
integers=(randint_ranged(-3, 3, (2, 3)),),
complex=(randc128_ranged(-3.14, 3.14, (2, 3)),),
empty=(numpy.asarray([]),),)
_grad_broadcast_unary_tan = dict(normal=(rand_ranged(-3.14, 3.14, (2, 3)),),
shifted=(rand_ranged(3.15, 6.28, (2, 3)),))
TanTester = makeBroadcastTester(op=tensor.tan,
expected=numpy.tan,
good=_good_broadcast_unary_tan,
grad=_grad_broadcast_unary_tan,
grad_rtol=tan_grad_rtol)
TanInplaceTester = makeBroadcastTester(op=inplace.tan_inplace,
expected=numpy.tan,
good=_good_broadcast_unary_tan,
grad=_grad_broadcast_unary_tan,
grad_rtol=tan_grad_rtol,
inplace=True)
ArcTanTester = makeBroadcastTester(op=tensor.arctan,
expected=numpy.arctan,
good=_good_broadcast_unary_wide,
grad=_grad_broadcast_unary_wide,
grad_rtol=tan_grad_rtol)
ArcTanInplaceTester = makeBroadcastTester(op=inplace.arctan_inplace,
expected=numpy.arctan,
good=_good_broadcast_unary_wide,
grad=_grad_broadcast_unary_wide,
grad_rtol=tan_grad_rtol,
inplace=True)
_good_broadcast_binary_arctan2 = dict(
same_shapes=(rand(2, 3), rand(2, 3)),
not_same_dimensions=(rand(2, 2), rand(2)),
scalar=(rand(2, 3), rand(1, 1)),
row=(rand(2, 3), rand(1, 3)),
column=(rand(2, 3), rand(2, 1)),
integers=(randint(2, 3), randint(2, 3)),
dtype_mixup_1=(rand(2, 3), randint(2, 3)),
dtype_mixup_2=(randint(2, 3), rand(2, 3)),
empty=(numpy.asarray([]), numpy.asarray([1])),
)
_grad_broadcast_binary_arctan2 = dict(
same_shapes=(rand(2, 3), rand(2, 3)),
scalar=(rand(2, 3), rand(1, 1)),
row=(rand(2, 3), rand(1, 3)),
column=(rand(2, 3), rand(2, 1)),
)
ArcTan2Tester = makeBroadcastTester(op=tensor.arctan2,
expected=numpy.arctan2,
good=_good_broadcast_binary_arctan2,
grad=_grad_broadcast_binary_arctan2,
grad_rtol=tan_grad_rtol)
ArcTan2InplaceTester = makeBroadcastTester(op=inplace.arctan2_inplace,
expected=numpy.arctan2,
good=_good_broadcast_binary_arctan2,
grad=_grad_broadcast_binary_arctan2,
grad_rtol=tan_grad_rtol,
inplace=True)
CoshTester = makeBroadcastTester(op=tensor.cosh,
expected=numpy.cosh,
good=_good_broadcast_unary_normal,
grad=_grad_broadcast_unary_normal)
CoshInplaceTester = makeBroadcastTester(op=inplace.cosh_inplace,
expected=numpy.cosh,
good=_good_broadcast_unary_normal,
grad=_grad_broadcast_unary_normal,
inplace=True)
_good_broadcast_unary_arccosh = dict(
normal=(rand_ranged(1, 1000, (2, 3)),),
integers=(randint_ranged(1, 1000, (2, 3)),),
complex=(randc128_ranged(1, 1000, (2, 3)),),
empty=(numpy.asarray([]),),)
_grad_broadcast_unary_arccosh = dict(normal=(rand_ranged(1, 1000, (2, 3)),),)
ArcCoshTester = makeBroadcastTester(op=tensor.arccosh,
expected=numpy.arccosh,
good=_good_broadcast_unary_arccosh,
grad=_grad_broadcast_unary_arccosh)
ArcCoshInplaceTester = makeBroadcastTester(op=inplace.arccosh_inplace,
expected=numpy.arccosh,
good=_good_broadcast_unary_arccosh,
grad=_grad_broadcast_unary_arccosh,
inplace=True)
SinhTester = makeBroadcastTester(op=tensor.sinh,
expected=numpy.sinh,
good=_good_broadcast_unary_normal,
grad=_grad_broadcast_unary_normal)
SinhInplaceTester = makeBroadcastTester(op=inplace.sinh_inplace,
expected=numpy.sinh,
good=_good_broadcast_unary_normal,
grad=_grad_broadcast_unary_normal,
inplace=True)
ArcSinhTester = makeBroadcastTester(op=tensor.arcsinh,
expected=numpy.arcsinh,
good=_good_broadcast_unary_normal,
grad=_grad_broadcast_unary_normal)
ArcSinhInplaceTester = makeBroadcastTester(op=inplace.arcsinh_inplace,
expected=numpy.arcsinh,
good=_good_broadcast_unary_normal,
grad=_grad_broadcast_unary_normal,
inplace=True)
TanhTester = makeBroadcastTester(op=tensor.tanh,
expected=numpy.tanh,
good=_good_broadcast_unary_normal,
grad=_grad_broadcast_unary_normal)
TanhInplaceTester = makeBroadcastTester(op=inplace.tanh_inplace,
expected=numpy.tanh,
good=_good_broadcast_unary_normal,
grad=_grad_broadcast_unary_normal,
inplace=True)
_good_broadcast_unary_arctanh = dict(normal=(rand_ranged(-1, 1, (2, 3)),),
integers=(randint_ranged(-1, 1, (2, 3)),),
complex=(randc128_ranged(-1, 1, (2, 3)),),
empty=(numpy.asarray([]),),)
_grad_broadcast_unary_arctanh = dict(normal=(rand_ranged(-1, 1, (2, 3)),),)
ArcTanhTester = makeBroadcastTester(op=tensor.arctanh,
expected=numpy.arctanh,
good=_good_broadcast_unary_arctanh,
grad=_grad_broadcast_unary_arctanh)
ArcTanhInplaceTester = makeBroadcastTester(op=inplace.arctanh_inplace,
expected=numpy.arctanh,
good=_good_broadcast_unary_arctanh,
grad=_grad_broadcast_unary_arctanh,
inplace=True)
CoshTester = makeBroadcastTester(op = tensor.cosh,
expected = numpy.cosh,
good = _good_broadcast_unary_normal,
grad = _grad_broadcast_unary_normal)
CoshInplaceTester = makeBroadcastTester(op = inplace.cosh_inplace,
expected = numpy.cosh,
good = _good_broadcast_unary_normal,
grad = _grad_broadcast_unary_normal,
inplace = True)
SinhTester = makeBroadcastTester(op = tensor.sinh,
expected = numpy.sinh,
good = _good_broadcast_unary_normal,
grad = _grad_broadcast_unary_normal)
SinhInplaceTester = makeBroadcastTester(op = inplace.sinh_inplace,
expected = numpy.sinh,
good = _good_broadcast_unary_normal,
grad = _grad_broadcast_unary_normal,
inplace = True)
TanhTester = makeBroadcastTester(op = tensor.tanh,
expected = numpy.tanh,
good = _good_broadcast_unary_normal,
grad = _grad_broadcast_unary_normal)
TanhInplaceTester = makeBroadcastTester(op = inplace.tanh_inplace,
expected = numpy.tanh,
good = _good_broadcast_unary_normal,
grad = _grad_broadcast_unary_normal,
inplace = True)
#inplace ops when the input is integer and the output is float* #inplace ops when the input is integer and the output is float*
# don't have a well defined behavior. We don't test that case. # don't have a well defined behavior. We don't test that case.
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论