提交 6405a561 authored 作者: Pascal Lamblin's avatar Pascal Lamblin

Merge pull request #1643 from nouiz/tests

Make a tests more robust to different seed
......@@ -1050,6 +1050,21 @@ def local_gpu_conv(node):
return make_graph
return ret
def values_eq_approx(a, b):
"""This fct is needed to don't have DebugMode raise useless
error due to ronding error.
This happen as We reduce on the two last dimensions, so this
can raise the absolute error if the number of element we
reduce on is significant.
"""
assert a.ndim == 4
atol = None
if a.shape[-1] * a.shape[-2] > 100:
atol = 3e-5
return tensor.TensorType.values_eq_approx(a, b, atol=atol)
if node.op == gpu_from_host:
#gpu_from_host(conv) -> gpu_conv(gpu_from_host)
host_input = node.inputs[0]
......@@ -1058,12 +1073,14 @@ def local_gpu_conv(node):
if gpu_conv is None:
return
img, kern = host_input.owner.inputs
out = gpu_conv(gpu_from_host(img),
gpu_from_host(kern))
out = tensor.patternbroadcast(out,
node.outputs[0].broadcastable)
out.values_eq_approx = values_eq_approx
# in some case the ConvOp broadcast the last 2 dimensions
# differently then the gpu ConvOp
return [tensor.patternbroadcast(
gpu_conv(gpu_from_host(img),
gpu_from_host(kern)),
node.outputs[0].broadcastable)]
return [out]
if isinstance(node.op, conv.ConvOp):
#conv(host_from_gpu) -> host_from_gpu(gpu_conv)
......@@ -1074,12 +1091,15 @@ def local_gpu_conv(node):
gpu_conv = GpuConvOp_from_ConvOp(node.op)
if gpu_conv is None:
return
out = gpu_conv(gpu_from_host(img),
gpu_from_host(kern))
out = tensor.patternbroadcast(
host_from_gpu(out),
node.outputs[0].broadcastable)
out.values_eq_approx = values_eq_approx
# in some case the ConvOp broadcast the last 2 dimensions
# differently then the gpu ConvOp
return [tensor.patternbroadcast(
host_from_gpu(gpu_conv(gpu_from_host(img),
gpu_from_host(kern))),
node.outputs[0].broadcastable)]
return [out]
import theano.tensor.signal.downsample as downsample
......
......@@ -19,6 +19,7 @@ except ImportError:
import theano
from theano import tensor
from theano.gof.python25 import any
from theano.tests.unittest_tools import seed_rng
# Skip test if cuda_ndarray is not available.
import theano.sandbox.cuda as cuda_ndarray
......@@ -415,6 +416,7 @@ def get_valid_shapes():
def test_valid_0_2():
seed_rng()
shapes = get_valid_shapes()
version = [0, 2]
verbose = 0
......@@ -446,6 +448,7 @@ def test_valid_0_2():
def test_valid_1_3_11_12():
seed_rng()
shapes = get_valid_shapes()
version = [1, 3, 11, 12]
verbose = 0
......@@ -475,6 +478,7 @@ def test_valid_1_3_11_12():
def test_valid_4():
seed_rng()
shapes = get_valid_shapes()
version = [4]
verbose = 0
......@@ -506,6 +510,7 @@ def test_valid_4():
def test_valid_5():
seed_rng()
shapes = get_valid_shapes()
version = [5]
verbose = 0
......@@ -537,6 +542,7 @@ def test_valid_5():
def test_valid_7_8_13():
seed_rng()
shapes = get_valid_shapes()
# This is to test the "new" lower shared memory usage.
shapes.append(((10, 30, 60, 60), (20, 30, 40, 40),
......@@ -571,6 +577,7 @@ def test_valid_7_8_13():
def test_valid_9_10():
seed_rng()
shapes = get_valid_shapes()
version = [9, 10]
verbose = 0
......@@ -601,6 +608,7 @@ def test_valid_9_10():
def test_valid():
seed_rng()
shapes = get_valid_shapes()
#shapes=shapes[400:426]
......@@ -621,6 +629,7 @@ def test_valid():
def test_full():
seed_rng()
shapes = get_basic_shapes()
shapes += get_shapes2()
#test image stride
......@@ -682,6 +691,7 @@ def test_full():
def test_subsample():
seed_rng()
# implement when
shapes = [((1, 1, 1, 1), (1, 1, 1, 1), (1, 1), (1, 1), (1, 1)),
((1, 1, 1, 1), (1, 1, 1, 1), (2, 2), (1, 1), (1, 1)),
......@@ -712,6 +722,7 @@ def test_subsample():
class TestConv2DGPU(unittest.TestCase):
def test_logical_shapes(self):
seed_rng()
for stride in range(1, 4):
kshp = (10, 2, 10, 10)
featshp = (3, 10, 11, 11)
......@@ -749,6 +760,7 @@ class TestConv2DGPU(unittest.TestCase):
Tests that when the shape gived at build time is not the same as
run time we raise an error
"""
seed_rng()
verbose = 0
random = True
print_ = False
......@@ -860,6 +872,7 @@ def benchmark():
def test_stack_rows_segfault_070312():
seed_rng()
# 07/03/2012
# Running this unittest with cuda-memcheck exposes an illegal read.
# THEANO_FLAGS=device=gpu cuda-memcheck nosetests \
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论