提交 8477307a authored 作者: Frédéric Bastien's avatar Frédéric Bastien

Merge pull request #1876 from jlowin/disconnected_inputs

Fix: disconnected_inputs arg not getting passed from jacobian to grad
...@@ -1666,7 +1666,11 @@ def jacobian(expression, wrt, consider_constant=None, ...@@ -1666,7 +1666,11 @@ def jacobian(expression, wrt, consider_constant=None,
if expression.ndim == 0: if expression.ndim == 0:
# expression is just a scalar, use grad # expression is just a scalar, use grad
return format_as(using_list, using_tuple, grad(expression, wrt)) return format_as(using_list, using_tuple,
grad(expression,
wrt,
consider_constant=consider_constant,
disconnected_inputs=disconnected_inputs))
def inner_function(*args): def inner_function(*args):
idx = args[0] idx = args[0]
......
...@@ -142,3 +142,25 @@ def test004_hessian(): ...@@ -142,3 +142,25 @@ def test004_hessian():
f = theano.function([x], Hx) f = theano.function([x], Hx)
vx = numpy.arange(10).astype(theano.config.floatX) vx = numpy.arange(10).astype(theano.config.floatX)
assert numpy.allclose(f(vx), numpy.eye(10) * 2) assert numpy.allclose(f(vx), numpy.eye(10) * 2)
def test_jacobian_disconnected_inputs():
"""
Test that disconnected inputs are properly handled by jacobian.
"""
v1 = tensor.vector()
v2 = tensor.vector()
jacobian_v = theano.gradient.jacobian(1 + v1, v2,
disconnected_inputs='ignore')
func_v = theano.function([v1, v2], jacobian_v)
val = numpy.arange(4.0).astype(theano.config.floatX)
assert numpy.allclose(func_v(val, val), numpy.zeros((4, 4)))
s1 = tensor.scalar()
s2 = tensor.scalar()
jacobian_s = theano.gradient.jacobian(1 + s1, s2,
disconnected_inputs='ignore')
func_s = theano.function([s2], jacobian_s)
val = numpy.array(1.0).astype(theano.config.floatX)
assert numpy.allclose(func_s(val), numpy.zeros(1))
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论