提交 a3e94b40 authored 作者: Pascal Lamblin's avatar Pascal Lamblin

Test more cases, make sure unimplemented raise error

上级 62c86dcb
...@@ -194,77 +194,143 @@ class TestConv2d(unittest.TestCase): ...@@ -194,77 +194,143 @@ class TestConv2d(unittest.TestCase):
if not dnn_available(): if not dnn_available():
return return
mode=mode_with_gpu mode=mode_with_gpu
# provide_shape is not used by the CuDNN impementation
inputs_shapes = self.inputs_shapes provide_shape = False
filters_shapes = self.filters_shapes
subsamples = self.subsamples for (i, f), s, b, flip in itertools.product(
border_modes = self.border_modes zip(self.inputs_shapes, self.filters_shapes),
for i, f in zip(inputs_shapes[0:1], filters_shapes[0:1]): self.subsamples,
for s in subsamples: self.border_modes,
for b in border_modes: self.filters_flip):
o = self.get_output_shape(i, f, s, b) o = self.get_output_shape(i, f, s, b)
for provide_shape in [False, True]: 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, device='gpu',
verify_grad=True, mode=mode, device='gpu', provide_shape=provide_shape, border_mode=b,
provide_shape=provide_shape, border_mode=b) filters_flip=flip)
self.run_gradweight(inputs_shape=i, filters_shape=f, self.run_gradweight(inputs_shape=i, filters_shape=f,
output_shape=o, subsample=s, output_shape=o, subsample=s,
verify_grad=True, mode=mode, device='gpu', verify_grad=True, mode=mode, device='gpu',
provide_shape=provide_shape, border_mode=b) provide_shape=provide_shape, border_mode=b,
self.run_gradinput(inputs_shape=i, filters_shape=f, filters_flip=flip)
output_shape=o, subsample=s, self.run_gradinput(inputs_shape=i, filters_shape=f,
verify_grad=True, mode=mode, device='gpu', output_shape=o, subsample=s,
provide_shape=provide_shape, border_mode=b) verify_grad=True, mode=mode, device='gpu',
provide_shape=provide_shape, border_mode=b,
filters_flip=flip)
def test_cormm_conv(self): def test_cormm_conv(self):
mode = mode_with_gpu.excluding('cudnn') mode = mode_with_gpu.excluding('cudnn')
inputs_shapes = self.inputs_shapes for (i, f), s, b, flip, provide_shape in itertools.product(
filters_shapes = self.filters_shapes zip(self.inputs_shapes, self.filters_shapes),
subsamples = self.subsamples self.subsamples,
border_modes = self.border_modes self.border_modes,
for i, f in zip(inputs_shapes, filters_shapes): self.filters_flip,
for s in subsamples: [False, True]):
for b in border_modes:
o = self.get_output_shape(i, f, s, b) o = self.get_output_shape(i, f, s, b)
for provide_shape in [False, True]: 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, device='gpu',
verify_grad=True, mode=mode, device='gpu', provide_shape=provide_shape, border_mode=b,
provide_shape=provide_shape, border_mode=b) filters_flip=flip)
self.run_gradweight(inputs_shape=i, filters_shape=f, self.run_gradweight(inputs_shape=i, filters_shape=f,
output_shape=o, subsample=s, output_shape=o, subsample=s,
verify_grad=True, mode=mode, device='gpu', verify_grad=True, mode=mode, device='gpu',
provide_shape=provide_shape, border_mode=b) provide_shape=provide_shape, border_mode=b,
self.run_gradinput(inputs_shape=i, filters_shape=f, filters_flip=flip)
output_shape=o, subsample=s, self.run_gradinput(inputs_shape=i, filters_shape=f,
verify_grad=True, mode=mode, device='gpu', output_shape=o, subsample=s,
provide_shape=provide_shape, border_mode=b) verify_grad=True, mode=mode, device='gpu',
provide_shape=provide_shape, border_mode=b,
filters_flip=flip)
def test_cpu_conv(self): def test_cpu_conv(self):
mode = mode_without_gpu mode = mode_without_gpu
inputs_shapes = self.inputs_shapes for (i, f), s, b, flip, provide_shape in itertools.product(
filters_shapes = self.filters_shapes zip(self.inputs_shapes, self.filters_shapes),
subsamples = self.subsamples self.subsamples,
border_modes = self.border_modes[:2] # only valid and full are supported self.border_modes,
self.filters_flip,
for i, f in zip(inputs_shapes, filters_shapes): [False, True]):
for s in subsamples:
for b in border_modes: o = self.get_output_shape(i, f, s, b)
o = self.get_output_shape(i, f, s, b) fwd_OK = True
for provide_shape in [False, True]: gradweight_OK = True
self.run_fwd(inputs_shape=i, filters_shape=f, subsample=s, gradinput_OK = True
verify_grad=True, mode=mode, device='cpu',
provide_shape=provide_shape, border_mode=b) if not flip:
self.run_gradweight(inputs_shape=i, filters_shape=f, fwd_OK = False
output_shape=o, subsample=s, gradweight_OK = False
verify_grad=False, mode=mode, device='cpu', gradinput_OK = False
provide_shape=provide_shape, border_mode=b)
self.run_gradinput(inputs_shape=i, filters_shape=f, if b not in ('valid', 'full'):
output_shape=o, subsample=s, fwd_OK = False
verify_grad=False, mode=mode, device='cpu', gradweight_OK = False
provide_shape=provide_shape, border_mode=b) gradinput_OK = False
if (not provide_shape) and (s != (1, 1)) and (b == 'full'):
gradweight_OK = False
gradinput_OK = False
if ((s[0] not in (1, 2)) or (s[1] not in (1, 2))) and (b == 'full'):
gradweight_OK = False
gradinput_OK = False
if fwd_OK:
self.run_fwd(inputs_shape=i, filters_shape=f, subsample=s,
verify_grad=True, mode=mode, device='cpu',
provide_shape=provide_shape, border_mode=b,
filters_flip=flip)
else:
self.assertRaises(NotImplementedError,
self.run_fwd,
inputs_shape=i,
filters_shape=f,
subsample=s,
verify_grad=False,
mode=mode,
device='cpu',
provide_shape=provide_shape,
border_mode=b,
filters_flip=flip)
if gradweight_OK:
self.run_gradweight(inputs_shape=i, filters_shape=f,
output_shape=o, subsample=s,
verify_grad=False, mode=mode, device='cpu',
provide_shape=provide_shape, border_mode=b,
filters_flip=flip)
else:
self.assertRaises(NotImplementedError,
self.run_gradweight,
inputs_shape=i,
filters_shape=f,
output_shape=o,
subsample=s,
verify_grad=False,
mode=mode,
device='cpu',
provide_shape=provide_shape,
border_mode=b,
filters_flip=flip)
if gradinput_OK:
self.run_gradinput(inputs_shape=i, filters_shape=f,
output_shape=o, subsample=s,
verify_grad=False, mode=mode, device='cpu',
provide_shape=provide_shape, border_mode=b,
filters_flip=flip)
else:
self.assertRaises(NotImplementedError,
self.run_gradinput,
inputs_shape=i,
filters_shape=f,
output_shape=o,
subsample=s,
verify_grad=False,
mode=mode,
device='cpu',
provide_shape=provide_shape,
border_mode=b,
filters_flip=flip)
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论