提交 6c8f1a15 authored 作者: Arnaud Bergeron's avatar Arnaud Bergeron

Refactor how the parameters are iterated over to reduce the total time of the…

Refactor how the parameters are iterated over to reduce the total time of the test. (This covers less cases, but should be almost equivalent.)
上级 6f4a125d
...@@ -24,19 +24,14 @@ else: ...@@ -24,19 +24,14 @@ else:
class TestDnnConv2d(test_abstract_conv.TestConv2d): class TestDnnConv2d(test_abstract_conv.TestConv2d):
def setUp(self): def setUp(self):
super(TestDnnConv2d, self).setUp() super(TestDnnConv2d, self).setUp()
# provide_shape is not used by the CuDNN impementation
self.provide_shape = [False]
self.shared = gpu_shared self.shared = gpu_shared
def test_dnn_conv(self): def tcase(self, i, f, s, b, flip, provide_shape):
if not dnn_available(): if not dnn_available():
raise SkipTest(cuda.dnn.dnn_available.msg) raise SkipTest(cuda.dnn.dnn_available.msg)
mode = mode_with_gpu mode = mode_with_gpu
# provide_shape is not used by the CuDNN impementation
provide_shape = False
for (i, f), s, b, flip in itertools.product(
zip(self.inputs_shapes, self.filters_shapes),
self.subsamples,
self.border_modes,
self.filter_flip):
o = self.get_output_shape(i, f, s, b) o = self.get_output_shape(i, f, s, b)
self.run_fwd(inputs_shape=i, filters_shape=f, subsample=s, self.run_fwd(inputs_shape=i, filters_shape=f, subsample=s,
verify_grad=True, mode=mode, verify_grad=True, mode=mode,
...@@ -58,16 +53,10 @@ class TestCorrMMConv2d(test_abstract_conv.TestConv2d): ...@@ -58,16 +53,10 @@ class TestCorrMMConv2d(test_abstract_conv.TestConv2d):
def setUp(self): def setUp(self):
super(TestCorrMMConv2d, self).setUp() super(TestCorrMMConv2d, self).setUp()
self.shared = gpu_shared self.shared = gpu_shared
self.mode = mode_with_gpu.excluding('cudnn')
def test_gpucorrmm_conv(self): def test_gpucorrmm_conv(self, i, f, s, b, flip, provide_shape):
mode = mode_with_gpu.excluding('cudnn') mode = self.mode
for (i, f), s, b, flip, provide_shape in itertools.product(
zip(self.inputs_shapes, self.filters_shapes),
self.subsamples,
self.border_modes,
self.filter_flip,
[False, True]):
o = self.get_output_shape(i, f, s, b) o = self.get_output_shape(i, f, s, b)
self.run_fwd(inputs_shape=i, filters_shape=f, subsample=s, self.run_fwd(inputs_shape=i, filters_shape=f, subsample=s,
verify_grad=True, mode=mode, verify_grad=True, mode=mode,
......
...@@ -15,19 +15,14 @@ class TestDnnConv2d(test_abstract_conv.TestConv2d): ...@@ -15,19 +15,14 @@ class TestDnnConv2d(test_abstract_conv.TestConv2d):
def setUp(self): def setUp(self):
super(TestDnnConv2d, self).setUp() super(TestDnnConv2d, self).setUp()
self.shared = gpuarray_shared_constructor self.shared = gpuarray_shared_constructor
# provide_shape is not used by the CuDNN impementation
self.provide_shape = [False]
def test_dnn_conv(self): def tcase(self, i, f, s, b, flip, provide_shape):
if not dnn_available(test_ctx_name): if not dnn_available(test_ctx_name):
raise SkipTest(dnn_available.msg) raise SkipTest(dnn_available.msg)
mode = mode_with_gpu mode = mode_with_gpu
# provide_shape is not used by the CuDNN impementation
provide_shape = False
for (i, f), s, b, flip in itertools.product(
zip(self.inputs_shapes, self.filters_shapes),
self.subsamples,
self.border_modes,
self.filter_flip):
o = self.get_output_shape(i, f, s, b) o = self.get_output_shape(i, f, s, b)
self.run_fwd(inputs_shape=i, filters_shape=f, subsample=s, self.run_fwd(inputs_shape=i, filters_shape=f, subsample=s,
verify_grad=True, mode=mode, verify_grad=True, mode=mode,
......
...@@ -67,6 +67,7 @@ class TestConv2d(unittest.TestCase): ...@@ -67,6 +67,7 @@ class TestConv2d(unittest.TestCase):
self.subsamples = [(1, 1), (2, 2), (2, 4)] self.subsamples = [(1, 1), (2, 2), (2, 4)]
self.border_modes = ["valid", "full", (0, 0), (1, 1), (5, 5), (5, 2)] self.border_modes = ["valid", "full", (0, 0), (1, 1), (5, 5), (5, 2)]
self.filter_flip = [True, False] self.filter_flip = [True, False]
self.provide_shape = [True, False]
self.shared = theano.compile.shared self.shared = theano.compile.shared
def get_output_shape(self, inputs_shape, filters_shape, subsample, def get_output_shape(self, inputs_shape, filters_shape, subsample,
...@@ -237,16 +238,24 @@ class TestConv2d(unittest.TestCase): ...@@ -237,16 +238,24 @@ class TestConv2d(unittest.TestCase):
[filters_val, output_val], [filters_val, output_val],
mode=mode, eps=1) mode=mode, eps=1)
def test_all(self):
ds = [0, 0]
db = (0, 0)
dflip = True in self.filter_flip
dprovide_shape = True in self.provide_shapes
for (i, f) in zip(self.inputs_shapes, self.filters_shapes):
for provide_shape in self.provide_shape:
self.tcase(i, f, ds, db, dflip, provide_shape)
for s in self.subsamples:
self.tcase(i, f, s, db, dflip, dprovide_shape)
for b in self.border_modes:
self.tcase(i, f, ds, b, dflip, dprovide_shape)
for flip in self.filter_flip:
self.tcase(i, f, ds, db, flip, dprovide_shape)
class TestCorrConv2d(TestConv2d):
def test_corrmm_conv(self):
for (i, f), s, b, flip, provide_shape in itertools.product(
zip(self.inputs_shapes, self.filters_shapes),
self.subsamples,
self.border_modes,
self.filter_flip,
[False, True]):
class TestCorrConv2d(TestConv2d):
def tcase(self, i, f, s, b, flip, provide_shape):
o = self.get_output_shape(i, f, s, b) o = self.get_output_shape(i, f, s, b)
self.run_fwd(inputs_shape=i, filters_shape=f, subsample=s, self.run_fwd(inputs_shape=i, filters_shape=f, subsample=s,
verify_grad=True, provide_shape=provide_shape, verify_grad=True, provide_shape=provide_shape,
...@@ -262,15 +271,11 @@ class TestCorrConv2d(TestConv2d): ...@@ -262,15 +271,11 @@ class TestCorrConv2d(TestConv2d):
class TestCpuConv2d(TestConv2d): class TestCpuConv2d(TestConv2d):
def test_cpu_conv(self): def setUp(self):
mode = theano.compile.mode.get_default_mode().excluding('conv_gemm') super(TestCpuConv2d, self).setUp()
for (i, f), s, b, flip, provide_shape in itertools.product( self.mode = theano.compile.mode.get_default_mode().excluding('conv_gemm')
zip(self.inputs_shapes, self.filters_shapes), def tcase(self, i, f, s, b, flip, provide_shape):
self.subsamples, mode = self.mode
self.border_modes,
self.filter_flip,
[False, True]):
o = self.get_output_shape(i, f, s, b) o = self.get_output_shape(i, f, s, b)
fwd_OK = True fwd_OK = True
gradweight_OK = True gradweight_OK = True
...@@ -296,9 +301,9 @@ class TestCpuConv2d(TestConv2d): ...@@ -296,9 +301,9 @@ class TestCpuConv2d(TestConv2d):
if fwd_OK: if fwd_OK:
self.run_fwd(inputs_shape=i, filters_shape=f, subsample=s, self.run_fwd(inputs_shape=i, filters_shape=f, subsample=s,
verify_grad=False, mode=mode, verify_grad=(gradweights_ok and gradinput_ok),
provide_shape=provide_shape, border_mode=b, mode=mode, provide_shape=provide_shape,
filter_flip=flip, target_op=ConvOp) border_mode=b, filter_flip=flip, target_op=ConvOp)
else: else:
self.assertRaises(NotImplementedError, self.assertRaises(NotImplementedError,
self.run_fwd, self.run_fwd,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论