提交 cfb493aa authored 作者: Frederic Bastien's avatar Frederic Bastien

Fix nanguardmode with slices

上级 fa327997
......@@ -68,6 +68,8 @@ def contains_nan(arr, node=None):
return False
elif isinstance(arr, np.random.mtrand.RandomState):
return False
elif isinstance(arr, slice):
return False
elif arr.size == 0:
return False
elif cuda.cuda_available and isinstance(arr, cuda.CudaNdarray):
......@@ -112,6 +114,8 @@ def contains_inf(arr, node=None):
return False
elif isinstance(arr, np.random.mtrand.RandomState):
return False
elif isinstance(arr, slice):
return False
elif arr.size == 0:
return False
elif cuda.cuda_available and isinstance(arr, cuda.CudaNdarray):
......@@ -246,6 +250,8 @@ class NanGuardMode(Mode):
err = False
elif isinstance(var, np.random.mtrand.RandomState):
err = False
elif isinstance(var, slice):
err = False
elif var.size == 0:
err = False
elif cuda.cuda_available and isinstance(var, cuda.CudaNdarray):
......
......@@ -46,3 +46,28 @@ def test_NanGuardMode():
assert_raises(AssertionError, fun, biga) # big values
finally:
_logger.propagate = True
# slices
a = numpy.random.randn(3, 4, 5).astype(theano.config.floatX)
infa = numpy.tile(
(numpy.asarray(100.) ** 1000000).astype(theano.config.floatX),
(3, 4, 5))
nana = numpy.tile(
numpy.asarray(numpy.nan).astype(theano.config.floatX), (3, 4, 5))
biga = numpy.tile(
numpy.asarray(1e20).astype(theano.config.floatX), (3, 4, 5))
x = T.tensor3()
y = x[:, T.arange(2), T.arange(2)]
fun = theano.function(
[x], y,
mode=NanGuardMode(nan_is_error=True, inf_is_error=True)
)
fun(a) # normal values
try:
_logger.propagate = False
assert_raises(AssertionError, fun, infa) # INFs
assert_raises(AssertionError, fun, nana) # NANs
assert_raises(AssertionError, fun, biga) # big values
finally:
_logger.propagate = True
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论