提交 f2f347a5 authored 作者: Sina Honari's avatar Sina Honari 提交者: Pascal Lamblin

fixing bugs + adding some tests

上级 13f31289
......@@ -1996,13 +1996,13 @@ def zero_grad(x):
class UndefinedGrad(ViewOp):
def grad(self, args, g_outs):
return [grad_undefined(self, i, inp[i]) for i in xrange(args)]
return [grad_undefined(self, i, arg) for i, arg in enumerate(args)]
def R_op(self, inputs, eval_points):
return [None]
def connection_pattern(self, node):
return [[False]]
return [[True]]
undefined_grad_ = UndefinedGrad()
......
......@@ -937,6 +937,7 @@ class MRG_RandomStreams(object):
raise TypeError("For now, p has to be specified in "
"MRG_RandomStreams.choice.")
p = as_tensor_variable(p)
p = undefined_grad(p)
if ndim is not None:
raise ValueError("ndim argument to "
......
......@@ -687,6 +687,56 @@ def test_overflow_cpu():
rng_mrg_overflow(sizes, fct, config.mode, should_raise_error=False)
def test_udefined_grad():
srng = MRG_RandomStreams(seed=1234)
# checking uniform distribution
low = T.scalar()
out = srng.uniform((), low=low)
assert_raises(theano.gradient.NullTypeGradError, theano.grad, out, low)
high = T.scalar()
out = srng.uniform((), low=0, high=high)
assert_raises(theano.gradient.NullTypeGradError, theano.grad, out, high)
out = srng.uniform((), low=low, high=high)
assert_raises(theano.gradient.NullTypeGradError, theano.grad, out,
(low, high))
# checking binomial distribution
prob = T.scalar()
out = srng.binomial((), p=prob)
assert_raises(theano.gradient.NullTypeGradError, theano.grad, out, prob)
# checking multinomial distribution
prob1 = T.scalar()
prob2 = T.scalar()
out = srng.multinomial((), pvals=[prob1, 0.5, 0.25], n=4)
assert_raises(theano.gradient.NullTypeGradError, theano.grad, out, prob1)
out = srng.multinomial((), pvals=[prob1, prob2])
assert_raises(theano.gradient.NullTypeGradError, theano.grad, out,
(prob1, prob2))
# checking choice
out = srng.choice((), p=[[prob1, prob2]], replace=False)
assert_raises(theano.gradient.NullTypeGradError, theano.grad, out,
(prob1, prob2))
# checking normal distribution
avg = T.scalar()
out = srng.normal((), avg=avg)
assert_raises(theano.gradient.NullTypeGradError, theano.grad, out, avg)
std = T.scalar()
out = srng.normal((), avg=0, std=std)
assert_raises(theano.gradient.NullTypeGradError, theano.grad, out, std)
out = srng.normal((), avg=avg, std=std)
assert_raises(theano.gradient.NullTypeGradError, theano.grad, out,
(avg, std))
if __name__ == "__main__":
rng = MRG_RandomStreams(np.random.randint(2147462579))
print(theano.__file__)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论