提交 0a7cb330 authored 作者: Frederic Bastien's avatar Frederic Bastien

Add assert that known_grads is deterministic or of size 1.

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