提交 58452aba authored 作者: Frederic Bastien's avatar Frederic Bastien

[ENH] Speed up nanguardmode by not checking *int* dtype

上级 1271c0bc
...@@ -106,6 +106,8 @@ def contains_nan(arr, node=None, var=None): ...@@ -106,6 +106,8 @@ def contains_nan(arr, node=None, var=None):
""" """
if not _is_numeric_value(arr, var): if not _is_numeric_value(arr, var):
return False return False
elif "int" in getattr(arr, 'dtype', ''):
return False
elif pygpu_available and isinstance(arr, GpuArray): elif pygpu_available and isinstance(arr, GpuArray):
return np.isnan(f_gpua_min(arr.reshape(arr.size))) return np.isnan(f_gpua_min(arr.reshape(arr.size)))
...@@ -139,6 +141,8 @@ def contains_inf(arr, node=None, var=None): ...@@ -139,6 +141,8 @@ def contains_inf(arr, node=None, var=None):
""" """
if not _is_numeric_value(arr, var): if not _is_numeric_value(arr, var):
return False return False
elif "int" in getattr(arr, 'dtype', ''):
return False
elif pygpu_available and isinstance(arr, GpuArray): elif pygpu_available and isinstance(arr, GpuArray):
return (np.isinf(f_gpua_min(arr.reshape(arr.size))) or return (np.isinf(f_gpua_min(arr.reshape(arr.size))) or
np.isinf(f_gpua_max(arr.reshape(arr.size)))) np.isinf(f_gpua_max(arr.reshape(arr.size))))
......
...@@ -69,3 +69,14 @@ def test_NanGuardMode(): ...@@ -69,3 +69,14 @@ def test_NanGuardMode():
assert_raises(AssertionError, fun, biga) # big values assert_raises(AssertionError, fun, biga) # big values
finally: finally:
_logger.propagate = True _logger.propagate = True
# Test with uint, we should not crash
x = T.matrix(dtype='uint8')
w = theano.shared(np.random.randn(5, 7).astype(theano.config.floatX))
y = T.dot(x, w)
a = (np.random.randn(3, 5).astype(theano.config.floatX)*10).astype('uint8')
fun = theano.function(
[x], y,
mode=NanGuardMode(nan_is_error=True, inf_is_error=True)
)
fun(a) # normal values
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论