提交 c749cbc6 authored 作者: affanv14's avatar affanv14

test optimization in grouped convolution

上级 b998dc61
...@@ -2288,27 +2288,17 @@ def dconvgi(border_mode, subsample, filter_dilation, num_groups): ...@@ -2288,27 +2288,17 @@ def dconvgi(border_mode, subsample, filter_dilation, num_groups):
class Cudnn_grouped_conv(Grouped_conv_noOptim): class Cudnn_grouped_conv(Grouped_conv_noOptim):
mode = mode_with_gpu mode = mode_with_gpu.excluding('conv_gemm')
conv = staticmethod(dconvfwd)
conv_gradw = staticmethod(dconvgw)
conv_gradi = staticmethod(dconvgi)
conv_op = dnn.GpuDnnConv conv_op = dnn.GpuDnnConv
conv_gradw_op = dnn.GpuDnnConvGradW conv_gradw_op = dnn.GpuDnnConvGradW
conv_gradi_op = dnn.GpuDnnConvGradI conv_gradi_op = dnn.GpuDnnConvGradI
flip_filter = False
is_dnn = True
class Cudnn_grouped_conv3d(Grouped_conv3d_noOptim): class Cudnn_grouped_conv3d(Grouped_conv3d_noOptim):
mode = mode_with_gpu mode = mode_with_gpu.excluding('conv_gemm')
conv = staticmethod(dconvfwd)
conv_gradw = staticmethod(dconvgw)
conv_gradi = staticmethod(dconvgi)
conv_op = dnn.GpuDnnConv conv_op = dnn.GpuDnnConv
conv_gradw_op = dnn.GpuDnnConvGradW conv_gradw_op = dnn.GpuDnnConvGradW
conv_gradi_op = dnn.GpuDnnConvGradI conv_gradi_op = dnn.GpuDnnConvGradI
flip_filter = False
is_dnn = True
def test_dnn_spatialtf(): def test_dnn_spatialtf():
......
...@@ -223,12 +223,7 @@ class TestCorrMM(unittest.TestCase): ...@@ -223,12 +223,7 @@ class TestCorrMM(unittest.TestCase):
class TestGroupGpuCorr2d(Grouped_conv_noOptim): class TestGroupGpuCorr2d(Grouped_conv_noOptim):
mode = theano.compile.get_mode("FAST_RUN") mode = mode_with_gpu.excluding('cudnn')
conv = GpuCorrMM
conv_gradw = GpuCorrMM_gradWeights
conv_gradi = GpuCorrMM_gradInputs
conv_op = GpuCorrMM conv_op = GpuCorrMM
conv_gradw_op = GpuCorrMM_gradWeights conv_gradw_op = GpuCorrMM_gradWeights
conv_gradi_op = GpuCorrMM_gradInputs conv_gradi_op = GpuCorrMM_gradInputs
flip_filter = True
is_dnn = False
...@@ -222,12 +222,7 @@ class TestCorr3dMM(unittest.TestCase): ...@@ -222,12 +222,7 @@ class TestCorr3dMM(unittest.TestCase):
class TestGroupGpuCorr3d(Grouped_conv3d_noOptim): class TestGroupGpuCorr3d(Grouped_conv3d_noOptim):
mode = theano.compile.get_mode("FAST_RUN") mode = mode_with_gpu.excluding('cudnn')
conv = GpuCorr3dMM
conv_gradw = GpuCorr3dMM_gradWeights
conv_gradi = GpuCorr3dMM_gradInputs
conv_op = GpuCorr3dMM conv_op = GpuCorr3dMM
conv_gradw_op = GpuCorr3dMM_gradWeights conv_gradw_op = GpuCorr3dMM_gradWeights
conv_gradi_op = GpuCorr3dMM_gradInputs conv_gradi_op = GpuCorr3dMM_gradInputs
flip_filter = True
is_dnn = False
...@@ -1439,7 +1439,6 @@ class Grouped_conv_noOptim(unittest.TestCase): ...@@ -1439,7 +1439,6 @@ class Grouped_conv_noOptim(unittest.TestCase):
conv_gradw_op = theano.tensor.nnet.abstract_conv.AbstractConv2d_gradWeights conv_gradw_op = theano.tensor.nnet.abstract_conv.AbstractConv2d_gradWeights
conv_gradi_op = theano.tensor.nnet.abstract_conv.AbstractConv2d_gradInputs conv_gradi_op = theano.tensor.nnet.abstract_conv.AbstractConv2d_gradInputs
mode = theano.Mode(optimizer=None) mode = theano.Mode(optimizer=None)
flip_filter = False
is_dnn = False is_dnn = False
def setUp(self): def setUp(self):
...@@ -1476,13 +1475,7 @@ class Grouped_conv_noOptim(unittest.TestCase): ...@@ -1476,13 +1475,7 @@ class Grouped_conv_noOptim(unittest.TestCase):
subsample=self.subsample, subsample=self.subsample,
filter_dilation=self.filter_dilation, filter_dilation=self.filter_dilation,
num_groups=groups) num_groups=groups)
if self.flip_filter: grouped_conv_output = grouped_conv_op(img_sym, kern_sym)
if self.convdim == 2:
grouped_conv_output = grouped_conv_op(img_sym, kern_sym[:, :, ::-1, ::-1])
else:
grouped_conv_output = grouped_conv_op(img_sym, kern_sym[:, :, ::-1, ::-1, ::-1])
else:
grouped_conv_output = grouped_conv_op(img_sym, kern_sym)
grouped_func = theano.function([img_sym, kern_sym], grouped_conv_output, mode=self.mode) grouped_func = theano.function([img_sym, kern_sym], grouped_conv_output, mode=self.mode)
assert any([isinstance(node.op, self.conv_op) assert any([isinstance(node.op, self.conv_op)
...@@ -1527,13 +1520,7 @@ class Grouped_conv_noOptim(unittest.TestCase): ...@@ -1527,13 +1520,7 @@ class Grouped_conv_noOptim(unittest.TestCase):
grouped_conv_output = grouped_convgrad_op(img_sym, grouped_conv_output = grouped_convgrad_op(img_sym,
top_sym, top_sym,
tensor.as_tensor_variable( tensor.as_tensor_variable(
kshp if self.is_dnn kshp[-self.convdim:]))
else kshp[-self.convdim:]))
if self.flip_filter:
if self.convdim == 2:
grouped_conv_output = grouped_conv_output[:, :, ::-1, ::-1]
else:
grouped_conv_output = grouped_conv_output[:, :, ::-1, ::-1, ::-1]
grouped_func = theano.function([img_sym, top_sym], grouped_conv_output, mode=self.mode) grouped_func = theano.function([img_sym, top_sym], grouped_conv_output, mode=self.mode)
assert any([isinstance(node.op, self.conv_gradw_op) assert any([isinstance(node.op, self.conv_gradw_op)
for node in grouped_func.maker.fgraph.toposort()]) for node in grouped_func.maker.fgraph.toposort()])
...@@ -1556,8 +1543,7 @@ class Grouped_conv_noOptim(unittest.TestCase): ...@@ -1556,8 +1543,7 @@ class Grouped_conv_noOptim(unittest.TestCase):
def conv_gradweight(inputs_val, output_val): def conv_gradweight(inputs_val, output_val):
return grouped_convgrad_op(inputs_val, output_val, return grouped_convgrad_op(inputs_val, output_val,
tensor.as_tensor_variable( tensor.as_tensor_variable(
kshp if self.is_dnn kshp[-self.convdim:]))
else kshp[-self.convdim:]))
utt.verify_grad(conv_gradweight, utt.verify_grad(conv_gradweight,
[img, top], [img, top],
...@@ -1580,19 +1566,10 @@ class Grouped_conv_noOptim(unittest.TestCase): ...@@ -1580,19 +1566,10 @@ class Grouped_conv_noOptim(unittest.TestCase):
subsample=self.subsample, subsample=self.subsample,
filter_dilation=self.filter_dilation, filter_dilation=self.filter_dilation,
num_groups=groups) num_groups=groups)
if self.flip_filter: grouped_conv_output = grouped_convgrad_op(kern_sym,
if self.convdim == 2: top_sym,
grouped_conv_output = grouped_convgrad_op(kern_sym[:, :, ::-1, ::-1], top_sym, tensor.as_tensor_variable(
tensor.as_tensor_variable(imshp[-self.convdim:])) imshp[-self.convdim:]))
else:
grouped_conv_output = grouped_convgrad_op(kern_sym[:, :, ::-1, ::-1, ::-1], top_sym,
tensor.as_tensor_variable(imshp[-self.convdim:]))
else:
grouped_conv_output = grouped_convgrad_op(kern_sym,
top_sym,
tensor.as_tensor_variable(
imshp if self.is_dnn
else imshp[-self.convdim:]))
grouped_func = theano.function([kern_sym, top_sym], grouped_conv_output, mode=self.mode) grouped_func = theano.function([kern_sym, top_sym], grouped_conv_output, mode=self.mode)
assert any([isinstance(node.op, self.conv_gradi_op) assert any([isinstance(node.op, self.conv_gradi_op)
for node in grouped_func.maker.fgraph.toposort()]) for node in grouped_func.maker.fgraph.toposort()])
...@@ -1615,8 +1592,7 @@ class Grouped_conv_noOptim(unittest.TestCase): ...@@ -1615,8 +1592,7 @@ class Grouped_conv_noOptim(unittest.TestCase):
def conv_gradinputs(filters_val, output_val): def conv_gradinputs(filters_val, output_val):
return grouped_convgrad_op(filters_val, output_val, return grouped_convgrad_op(filters_val, output_val,
tensor.as_tensor_variable( tensor.as_tensor_variable(
imshp if self.is_dnn imshp[-self.convdim:]))
else imshp[-self.convdim:]))
utt.verify_grad(conv_gradinputs, utt.verify_grad(conv_gradinputs,
[kern, top], [kern, top],
...@@ -1631,8 +1607,6 @@ class Grouped_conv3d_noOptim(Grouped_conv_noOptim): ...@@ -1631,8 +1607,6 @@ class Grouped_conv3d_noOptim(Grouped_conv_noOptim):
conv_gradw_op = theano.tensor.nnet.abstract_conv.AbstractConv3d_gradWeights conv_gradw_op = theano.tensor.nnet.abstract_conv.AbstractConv3d_gradWeights
conv_gradi_op = theano.tensor.nnet.abstract_conv.AbstractConv3d_gradInputs conv_gradi_op = theano.tensor.nnet.abstract_conv.AbstractConv3d_gradInputs
mode = theano.Mode(optimizer=None) mode = theano.Mode(optimizer=None)
flip_filter = False
is_dnn = False
def setUp(self): def setUp(self):
self.num_groups = [3, 2, 4, 4] self.num_groups = [3, 2, 4, 4]
......
...@@ -418,18 +418,10 @@ class TestCorr2D(utt.InferShapeTester): ...@@ -418,18 +418,10 @@ class TestCorr2D(utt.InferShapeTester):
class TestGroupCorr2d(Grouped_conv_noOptim): class TestGroupCorr2d(Grouped_conv_noOptim):
if theano.config.mode == "FAST_COMPILE": mode = theano.compile.get_mode("FAST_RUN").excluding('gpuarray')
mode = theano.compile.get_mode("FAST_RUN")
else:
mode = None
conv = corr.CorrMM
conv_gradw = corr.CorrMM_gradWeights
conv_gradi = corr.CorrMM_gradInputs
conv_op = corr.CorrMM conv_op = corr.CorrMM
conv_gradw_op = corr.CorrMM_gradWeights conv_gradw_op = corr.CorrMM_gradWeights
conv_gradi_op = corr.CorrMM_gradInputs conv_gradi_op = corr.CorrMM_gradInputs
flip_filter = True
is_dnn = False
def test_graph(self): def test_graph(self):
# define common values first # define common values first
......
...@@ -420,13 +420,7 @@ class TestCorr3D(utt.InferShapeTester): ...@@ -420,13 +420,7 @@ class TestCorr3D(utt.InferShapeTester):
class TestGroupCorr3d(Grouped_conv3d_noOptim): class TestGroupCorr3d(Grouped_conv3d_noOptim):
if theano.config.mode == "FAST_COMPILE": mode = theano.compile.get_mode("FAST_RUN")
mode = theano.compile.get_mode("FAST_RUN")
else:
mode = None
conv = corr3d.Corr3dMM
conv_gradw = corr3d.Corr3dMM_gradWeights
conv_gradi = corr3d.Corr3dMM_gradInputs
conv_op = corr3d.Corr3dMM conv_op = corr3d.Corr3dMM
conv_gradw_op = corr3d.Corr3dMM_gradWeights conv_gradw_op = corr3d.Corr3dMM_gradWeights
conv_gradi_op = corr3d.Corr3dMM_gradInputs conv_gradi_op = corr3d.Corr3dMM_gradInputs
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论