提交 b7156718 authored 作者: Nicolas Bouchard's avatar Nicolas Bouchard

Add expm1.

上级 555af254
...@@ -1975,6 +1975,25 @@ class Exp2(UnaryScalarOp): ...@@ -1975,6 +1975,25 @@ class Exp2(UnaryScalarOp):
exp2 = Exp2(upgrade_to_float, name='exp2') exp2 = Exp2(upgrade_to_float, name='exp2')
class Expm1(UnaryScalarOp):
def impl(self, x):
return numpy.expm1(x)
def grad(self, (x, ), (gz, )):
if x.type in complex_types:
raise NotImplementedError()
elif x.type in float_types:
return gz * exp(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 = exp(%(x)s) - 1;" % locals()
expm1 = Expm1(upgrade_to_float, name='expm1')
class Sqr(UnaryScalarOp): class Sqr(UnaryScalarOp):
def impl(self, x): def impl(self, x):
return x * x return x * x
......
...@@ -2578,6 +2578,11 @@ def exp2(a): ...@@ -2578,6 +2578,11 @@ def exp2(a):
"""2^`a`""" """2^`a`"""
@_scal_elemwise_with_nfunc('expm1', 1, 1)
def expm1(a):
"""e^`a - 1`"""
@_scal_elemwise_with_nfunc('negative', 1, 1) @_scal_elemwise_with_nfunc('negative', 1, 1)
def neg(a): def neg(a):
"""-a""" """-a"""
......
...@@ -91,6 +91,10 @@ def exp_inplace(a): ...@@ -91,6 +91,10 @@ def exp_inplace(a):
def exp2_inplace(a): def exp2_inplace(a):
"""2^`a` (inplace on `a`)""" """2^`a` (inplace on `a`)"""
@_scal_inplace
def expm1_inplace(a):
"""e^`a` - 1 (inplace on `a`)"""
@_scal_inplace @_scal_inplace
def neg_inplace(a): def neg_inplace(a):
"""-a (inplace on a)""" """-a (inplace on a)"""
......
...@@ -966,6 +966,18 @@ Exp2InplaceTester = makeBroadcastTester(op=inplace.exp2_inplace, ...@@ -966,6 +966,18 @@ Exp2InplaceTester = makeBroadcastTester(op=inplace.exp2_inplace,
grad=_grad_broadcast_unary_normal, grad=_grad_broadcast_unary_normal,
inplace=True) inplace=True)
Expm1Tester = makeBroadcastTester(op=tensor.expm1,
expected=numpy.expm1,
good=_good_broadcast_unary_normal,
grad=_grad_broadcast_unary_normal)
Expm1InplaceTester = makeBroadcastTester(op=inplace.expm1_inplace,
expected=numpy.expm1,
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)),), _good_broadcast_unary_positive = dict(normal=(rand_ranged(0.001, 5, (2, 3)),),
integers=(randint_ranged(1, 5, (2, 3)),), integers=(randint_ranged(1, 5, (2, 3)),),
complex=(randc128_ranged(1, 5, (2, 3)),), complex=(randc128_ranged(1, 5, (2, 3)),),
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论