提交 06b1fb7b authored 作者: Pascal Lamblin's avatar Pascal Lamblin 提交者: GitHub

Merge pull request #4873 from nouiz/grad_assert

Grad assert
......@@ -390,8 +390,8 @@ def grad(cost, wrt, consider_constant=None,
If True, variables generated by grad will be named
(d<cost.name>/d<wrt.name>) provided that both cost and wrt
have names
known_grads : dict, optional
A dictionary mapping variables to their gradients. This is
known_grads : OrderedDict, optional
A ordered dictionary mapping variables to their gradients. This is
useful in the case where you know the gradient on some
variables but do not know the original cost.
return_disconnected : {'zero', 'None', 'Disconnected'}
......@@ -462,6 +462,9 @@ def grad(cost, wrt, consider_constant=None,
if known_grads is None:
known_grads = OrderedDict()
else:
m = "known_grads must be an OrderedDict. "
assert isinstance(known_grads, OrderedDict) or len(known_grads) <= 1, m
# The gradient of the cost is 1 unless specified otherwise by known_grads.
if cost is not None:
......
......@@ -472,9 +472,8 @@ def test_known_grads():
true_grads = true_grads(*values)
for layer in layers:
print('Testing by separately computing ', layer)
first = theano.tensor.grad(cost, layer, disconnected_inputs='ignore')
known = dict(izip(layer, first))
known = OrderedDict(izip(layer, first))
full = theano.tensor.grad(cost=None, known_grads=known, wrt=inputs, disconnected_inputs='ignore')
full = theano.function(inputs, full)
full = full(*values)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论