提交 59a17284 authored 作者: Gijs van Tulder's avatar Gijs van Tulder

Brute-force test for inconsistent conv shapes.

上级 0e40d582
from __future__ import absolute_import, print_function, division from __future__ import absolute_import, print_function, division
from nose.plugins.skip import SkipTest from nose.plugins.skip import SkipTest
from nose.tools import assert_raises
import numpy import numpy
...@@ -49,17 +50,30 @@ class TestDnnConv2d(test_abstract_conv.BaseTestConv2d): ...@@ -49,17 +50,30 @@ class TestDnnConv2d(test_abstract_conv.BaseTestConv2d):
provide_shape=provide_shape, border_mode=b, provide_shape=provide_shape, border_mode=b,
filter_flip=flip, target_op=GpuDnnConvGradI) filter_flip=flip, target_op=GpuDnnConvGradI)
def tcase_gi(self, i, f, o, s, b, flip, provide_shape, fd=(1, 1)): def tcase_gi(self, i, f, o, s, b, flip, provide_shape, fd=(1, 1), expect_error=False):
if not dnn_available(test_ctx_name): if not dnn_available(test_ctx_name):
raise SkipTest(dnn_available.msg) raise SkipTest(dnn_available.msg)
if fd != (1, 1): if fd != (1, 1):
raise SkipTest("Doesn't have CUDNN implementation") raise SkipTest("Doesn't have CUDNN implementation")
mode = mode_with_gpu mode = mode_with_gpu
self.run_gradinput(inputs_shape=i, filters_shape=f,
output_shape=o, subsample=s, if not expect_error:
verify_grad=True, mode=mode, self.run_gradinput(inputs_shape=i, filters_shape=f,
provide_shape=provide_shape, border_mode=b, output_shape=o, subsample=s,
filter_flip=flip, target_op=GpuDnnConvGradI) verify_grad=True, mode=mode,
provide_shape=provide_shape, border_mode=b,
filter_flip=flip, target_op=GpuDnnConvGradI,
filter_dilation=fd)
else:
assert_raises((RuntimeError, ValueError),
self.run_gradinput,
inputs_shape=i, filters_shape=f,
output_shape=o, subsample=s,
verify_grad=False, mode=mode,
provide_shape=provide_shape, border_mode=b,
filter_flip=flip, target_op=GpuDnnConvGradI,
ref=None,
filter_dilation=fd)
class TestDnnConv3d(test_abstract_conv.BaseTestConv3d): class TestDnnConv3d(test_abstract_conv.BaseTestConv3d):
...@@ -94,17 +108,30 @@ class TestDnnConv3d(test_abstract_conv.BaseTestConv3d): ...@@ -94,17 +108,30 @@ class TestDnnConv3d(test_abstract_conv.BaseTestConv3d):
provide_shape=provide_shape, border_mode=b, provide_shape=provide_shape, border_mode=b,
filter_flip=flip, target_op=GpuDnnConvGradI) filter_flip=flip, target_op=GpuDnnConvGradI)
def tcase_gi(self, i, f, o, s, b, flip, provide_shape, fd=(1, 1, 1)): def tcase_gi(self, i, f, o, s, b, flip, provide_shape, fd=(1, 1, 1), expect_error=False):
if not dnn_available(test_ctx_name): if not dnn_available(test_ctx_name):
raise SkipTest(dnn_available.msg) raise SkipTest(dnn_available.msg)
if fd != (1, 1, 1): if fd != (1, 1, 1):
raise SkipTest("Doesn't have CUDNN implementation") raise SkipTest("Doesn't have CUDNN implementation")
mode = mode_with_gpu mode = mode_with_gpu
self.run_gradinput(inputs_shape=i, filters_shape=f,
output_shape=o, subsample=s, if not expect_error:
verify_grad=True, mode=mode, self.run_gradinput(inputs_shape=i, filters_shape=f,
provide_shape=provide_shape, border_mode=b, output_shape=o, subsample=s,
filter_flip=flip, target_op=GpuDnnConvGradI) verify_grad=True, mode=mode,
provide_shape=provide_shape, border_mode=b,
filter_flip=flip, target_op=GpuDnnConvGradI,
filter_dilation=fd)
else:
assert_raises((RuntimeError, ValueError),
self.run_gradinput,
inputs_shape=i, filters_shape=f,
output_shape=o, subsample=s,
verify_grad=False, mode=mode,
provide_shape=provide_shape, border_mode=b,
filter_flip=flip, target_op=GpuDnnConvGradI,
ref=None,
filter_dilation=fd)
class TestCorrMMConv2d(test_abstract_conv.BaseTestConv2d): class TestCorrMMConv2d(test_abstract_conv.BaseTestConv2d):
...@@ -139,15 +166,27 @@ class TestCorrMMConv2d(test_abstract_conv.BaseTestConv2d): ...@@ -139,15 +166,27 @@ class TestCorrMMConv2d(test_abstract_conv.BaseTestConv2d):
target_op=GpuCorrMM_gradInputs, target_op=GpuCorrMM_gradInputs,
filter_dilation=fd) filter_dilation=fd)
def tcase_gi(self, i, f, o, s, b, flip, provide_shape, fd=(1, 1)): def tcase_gi(self, i, f, o, s, b, flip, provide_shape, fd=(1, 1), expect_error=False):
mode = self.mode mode = self.mode
self.run_gradinput(inputs_shape=i, filters_shape=f, if not expect_error:
output_shape=o, subsample=s, self.run_gradinput(inputs_shape=i, filters_shape=f,
verify_grad=True, mode=mode, output_shape=o, subsample=s,
provide_shape=provide_shape, border_mode=b, verify_grad=True, mode=mode,
filter_flip=flip, provide_shape=provide_shape, border_mode=b,
target_op=GpuCorrMM_gradInputs, filter_flip=flip,
filter_dilation=fd) target_op=GpuCorrMM_gradInputs,
filter_dilation=fd)
else:
assert_raises(ValueError,
self.run_gradinput,
inputs_shape=i, filters_shape=f,
output_shape=o, subsample=s,
verify_grad=False, mode=mode,
provide_shape=provide_shape, border_mode=b,
filter_flip=flip,
target_op=GpuCorrMM_gradInputs,
ref=None,
filter_dilation=fd)
class TestCorrMMConv3d(test_abstract_conv.BaseTestConv3d): class TestCorrMMConv3d(test_abstract_conv.BaseTestConv3d):
...@@ -182,15 +221,27 @@ class TestCorrMMConv3d(test_abstract_conv.BaseTestConv3d): ...@@ -182,15 +221,27 @@ class TestCorrMMConv3d(test_abstract_conv.BaseTestConv3d):
target_op=GpuCorr3dMM_gradInputs, target_op=GpuCorr3dMM_gradInputs,
filter_dilation=fd) filter_dilation=fd)
def tcase_gi(self, i, f, o, s, b, flip, provide_shape, fd=(1, 1, 1)): def tcase_gi(self, i, f, o, s, b, flip, provide_shape, fd=(1, 1, 1), expect_error=False):
mode = self.mode mode = self.mode
self.run_gradinput(inputs_shape=i, filters_shape=f, if not expect_error:
output_shape=o, subsample=s, self.run_gradinput(inputs_shape=i, filters_shape=f,
verify_grad=True, mode=mode, output_shape=o, subsample=s,
provide_shape=provide_shape, border_mode=b, verify_grad=True, mode=mode,
filter_flip=flip, provide_shape=provide_shape, border_mode=b,
target_op=GpuCorr3dMM_gradInputs, filter_flip=flip,
filter_dilation=fd) target_op=GpuCorr3dMM_gradInputs,
filter_dilation=fd)
else:
assert_raises(ValueError,
self.run_gradinput,
inputs_shape=i, filters_shape=f,
output_shape=o, subsample=s,
verify_grad=False, mode=mode,
provide_shape=provide_shape, border_mode=b,
filter_flip=flip,
target_op=GpuCorr3dMM_gradInputs,
ref=None,
filter_dilation=fd)
class TestDnnConvTypes(test_abstract_conv.TestConvTypes): class TestDnnConvTypes(test_abstract_conv.TestConvTypes):
......
...@@ -13,6 +13,7 @@ from theano.sandbox.cuda.blas import ( ...@@ -13,6 +13,7 @@ from theano.sandbox.cuda.blas import (
GpuCorrMM, GpuCorrMM_gradWeights, GpuCorrMM_gradInputs, GpuCorrMM, GpuCorrMM_gradWeights, GpuCorrMM_gradInputs,
GpuCorr3dMM, GpuCorr3dMM_gradWeights, GpuCorr3dMM_gradInputs) GpuCorr3dMM, GpuCorr3dMM_gradWeights, GpuCorr3dMM_gradInputs)
from nose.plugins.skip import SkipTest from nose.plugins.skip import SkipTest
from nose.tools import assert_raises
import theano.sandbox.cuda as cuda import theano.sandbox.cuda as cuda
if not cuda.cuda_available: if not cuda.cuda_available:
...@@ -57,18 +58,30 @@ class TestDnnConv2d(test_abstract_conv.BaseTestConv2d): ...@@ -57,18 +58,30 @@ class TestDnnConv2d(test_abstract_conv.BaseTestConv2d):
filter_flip=flip, target_op=GpuDnnConvGradI, filter_flip=flip, target_op=GpuDnnConvGradI,
filter_dilation=fd) filter_dilation=fd)
def tcase_gi(self, i, f, o, s, b, flip, provide_shape, fd=(1, 1)): def tcase_gi(self, i, f, o, s, b, flip, provide_shape, fd=(1, 1), expect_error=False):
if fd != (1, 1): if fd != (1, 1):
raise SkipTest("No dilation implementation for cuDNN ConvOp.") raise SkipTest("No dilation implementation for cuDNN ConvOp.")
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
self.run_gradinput(inputs_shape=i, filters_shape=f,
output_shape=o, subsample=s, if not expect_error:
verify_grad=True, mode=mode, self.run_gradinput(inputs_shape=i, filters_shape=f,
provide_shape=provide_shape, border_mode=b, output_shape=o, subsample=s,
filter_flip=flip, target_op=GpuDnnConvGradI, verify_grad=True, mode=mode,
filter_dilation=fd) provide_shape=provide_shape, border_mode=b,
filter_flip=flip, target_op=GpuDnnConvGradI,
filter_dilation=fd)
else:
assert_raises((RuntimeError, ValueError),
self.run_gradinput,
inputs_shape=i, filters_shape=f,
output_shape=o, subsample=s,
verify_grad=False, mode=mode,
provide_shape=provide_shape, border_mode=b,
filter_flip=flip, target_op=GpuDnnConvGradI,
ref=None,
filter_dilation=fd)
class TestDnnConv3d(test_abstract_conv.BaseTestConv3d): class TestDnnConv3d(test_abstract_conv.BaseTestConv3d):
...@@ -104,18 +117,30 @@ class TestDnnConv3d(test_abstract_conv.BaseTestConv3d): ...@@ -104,18 +117,30 @@ class TestDnnConv3d(test_abstract_conv.BaseTestConv3d):
filter_flip=flip, target_op=GpuDnnConv3dGradI, filter_flip=flip, target_op=GpuDnnConv3dGradI,
filter_dilation=fd) filter_dilation=fd)
def tcase_gi(self, i, f, o, s, b, flip, provide_shape, fd=(1, 1, 1)): def tcase_gi(self, i, f, o, s, b, flip, provide_shape, fd=(1, 1, 1), expect_error=False):
if fd != (1, 1, 1): if fd != (1, 1, 1):
raise SkipTest("No dilation implementation for cuDNN ConvOp.") raise SkipTest("No dilation implementation for cuDNN ConvOp.")
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
self.run_gradinput(inputs_shape=i, filters_shape=f,
output_shape=o, subsample=s, if not expect_error:
verify_grad=True, mode=mode, self.run_gradinput(inputs_shape=i, filters_shape=f,
provide_shape=provide_shape, border_mode=b, output_shape=o, subsample=s,
filter_flip=flip, target_op=GpuDnnConvGradI, verify_grad=True, mode=mode,
filter_dilation=fd) provide_shape=provide_shape, border_mode=b,
filter_flip=flip, target_op=GpuDnnConvGradI,
filter_dilation=fd)
else:
assert_raises((RuntimeError, ValueError),
self.run_gradinput,
inputs_shape=i, filters_shape=f,
output_shape=o, subsample=s,
verify_grad=False, mode=mode,
provide_shape=provide_shape, border_mode=b,
filter_flip=flip, target_op=GpuDnnConvGradI,
ref=None,
filter_dilation=fd)
class TestCorrMMConv2d(test_abstract_conv.BaseTestConv2d): class TestCorrMMConv2d(test_abstract_conv.BaseTestConv2d):
...@@ -150,15 +175,27 @@ class TestCorrMMConv2d(test_abstract_conv.BaseTestConv2d): ...@@ -150,15 +175,27 @@ class TestCorrMMConv2d(test_abstract_conv.BaseTestConv2d):
target_op=GpuCorrMM_gradInputs, target_op=GpuCorrMM_gradInputs,
filter_dilation=fd) filter_dilation=fd)
def tcase_gi(self, i, f, o, s, b, flip, provide_shape, fd=(1, 1)): def tcase_gi(self, i, f, o, s, b, flip, provide_shape, fd=(1, 1), expect_error=False):
mode = self.mode mode = self.mode
self.run_gradinput(inputs_shape=i, filters_shape=f, if not expect_error:
output_shape=o, subsample=s, self.run_gradinput(inputs_shape=i, filters_shape=f,
verify_grad=True, mode=mode, output_shape=o, subsample=s,
provide_shape=provide_shape, border_mode=b, verify_grad=True, mode=mode,
filter_flip=flip, provide_shape=provide_shape, border_mode=b,
target_op=GpuCorrMM_gradInputs, filter_flip=flip,
filter_dilation=fd) target_op=GpuCorrMM_gradInputs,
filter_dilation=fd)
else:
assert_raises(ValueError,
self.run_gradinput,
inputs_shape=i, filters_shape=f,
output_shape=o, subsample=s,
verify_grad=False, mode=mode,
provide_shape=provide_shape, border_mode=b,
filter_flip=flip,
target_op=GpuCorrMM_gradInputs,
ref=None,
filter_dilation=fd)
class TestCorrMMConv3d(test_abstract_conv.BaseTestConv3d): class TestCorrMMConv3d(test_abstract_conv.BaseTestConv3d):
...@@ -193,15 +230,27 @@ class TestCorrMMConv3d(test_abstract_conv.BaseTestConv3d): ...@@ -193,15 +230,27 @@ class TestCorrMMConv3d(test_abstract_conv.BaseTestConv3d):
target_op=GpuCorr3dMM_gradInputs, target_op=GpuCorr3dMM_gradInputs,
filter_dilation=fd) filter_dilation=fd)
def tcase_gi(self, i, f, o, s, b, flip, provide_shape, fd=(1, 1, 1)): def tcase_gi(self, i, f, o, s, b, flip, provide_shape, fd=(1, 1, 1), expect_error=False):
mode = self.mode mode = self.mode
self.run_gradinput(inputs_shape=i, filters_shape=f, if not expect_error:
output_shape=o, subsample=s, self.run_gradinput(inputs_shape=i, filters_shape=f,
verify_grad=True, mode=mode, output_shape=o, subsample=s,
provide_shape=provide_shape, border_mode=b, verify_grad=True, mode=mode,
filter_flip=flip, provide_shape=provide_shape, border_mode=b,
target_op=GpuCorr3dMM_gradInputs, filter_flip=flip,
filter_dilation=fd) target_op=GpuCorr3dMM_gradInputs,
filter_dilation=fd)
else:
assert_raises(ValueError,
self.run_gradinput,
inputs_shape=i, filters_shape=f,
output_shape=o, subsample=s,
verify_grad=False, mode=mode,
provide_shape=provide_shape, border_mode=b,
filter_flip=flip,
target_op=GpuCorr3dMM_gradInputs,
ref=None,
filter_dilation=fd)
class TestDnnConvTypes(test_abstract_conv.TestConvTypes): class TestDnnConvTypes(test_abstract_conv.TestConvTypes):
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论