提交 f093f2e2 authored 作者: Frederic's avatar Frederic

bugfix with padding and pool size == strides size.

上级 8db25a7a
...@@ -272,7 +272,7 @@ class DownsampleFactorMax(Op): ...@@ -272,7 +272,7 @@ class DownsampleFactorMax(Op):
# No implementation is currently for the case where # No implementation is currently for the case where
# the stride size and the pooling size are different. # the stride size and the pooling size are different.
# An exception is raised for such a case. # An exception is raised for such a case.
if self.ds != self.st: if self.ds != self.st or self.padding != (0, 0):
raise theano.gof.utils.MethodNotDefined() raise theano.gof.utils.MethodNotDefined()
x, = inp x, = inp
z, = out z, = out
...@@ -346,7 +346,7 @@ class DownsampleFactorMax(Op): ...@@ -346,7 +346,7 @@ class DownsampleFactorMax(Op):
""" % locals() """ % locals()
def c_code_cache_version(self): def c_code_cache_version(self):
return (0, 1) return (0, 2)
class DownsampleFactorMaxGrad(Op): class DownsampleFactorMaxGrad(Op):
...@@ -433,7 +433,7 @@ class DownsampleFactorMaxGrad(Op): ...@@ -433,7 +433,7 @@ class DownsampleFactorMaxGrad(Op):
self, 2, gz, 'Hessian not implemented with padding')] self, 2, gz, 'Hessian not implemented with padding')]
def c_code(self, node, name, inp, out, sub): def c_code(self, node, name, inp, out, sub):
if self.ds != self.st: if self.ds != self.st or self.padding != (0, 0):
raise theano.gof.utils.MethodNotDefined() raise theano.gof.utils.MethodNotDefined()
x, z, gz = inp x, z, gz = inp
gx, = out gx, = out
...@@ -527,7 +527,7 @@ class DownsampleFactorMaxGrad(Op): ...@@ -527,7 +527,7 @@ class DownsampleFactorMaxGrad(Op):
""" % locals() """ % locals()
def c_code_cache_version(self): def c_code_cache_version(self):
return (0, 1) return (0, 2)
class DownsampleFactorMaxGradGrad(Op): class DownsampleFactorMaxGradGrad(Op):
......
...@@ -242,10 +242,10 @@ class TestDownsampleFactorMax(utt.InferShapeTester): ...@@ -242,10 +242,10 @@ class TestDownsampleFactorMax(utt.InferShapeTester):
def test_DownsampleFactorMaxPaddingStride(self): def test_DownsampleFactorMaxPaddingStride(self):
ignore_border = True # padding does not support ignore_border=False ignore_border = True # padding does not support ignore_border=False
rng = numpy.random.RandomState(utt.fetch_seed()) rng = numpy.random.RandomState(utt.fetch_seed())
maxpoolsizes = [(3, 3), (4, 4), (3, 4), (4, 3)] maxpoolsizes = [(3, 3), (4, 4), (3, 4), (4, 3), (2, 2)]
stridesizes = [(2, 2), (2, 2), (1, 1), (1, 2)] stridesizes = [(2, 2), (2, 2), (1, 1), (1, 2), (2, 2)]
paddingsizes = [(2, 2), (1, 2), (2, 1), (0, 0)] paddingsizes = [(2, 2), (1, 2), (2, 1), (0, 0), (1, 1)]
imgsizes = [(5, 5), (5, 5), (5, 6), (6, 5)] imgsizes = [(5, 5), (5, 5), (5, 6), (6, 5), (5, 5)]
m = 4 # minibatch m = 4 # minibatch
c = 10 # channel size c = 10 # channel size
images = tensor.dtensor4() images = tensor.dtensor4()
...@@ -267,10 +267,10 @@ class TestDownsampleFactorMax(utt.InferShapeTester): ...@@ -267,10 +267,10 @@ class TestDownsampleFactorMax(utt.InferShapeTester):
def test_DownsampleFactorMaxPaddingStride_grad(self): def test_DownsampleFactorMaxPaddingStride_grad(self):
rng = numpy.random.RandomState(utt.fetch_seed()) rng = numpy.random.RandomState(utt.fetch_seed())
imgsizes = ((10, 10), (10, 5)) imgsizes = ((10, 10), (10, 5), (5, 5))
maxpoolsizes = ((5, 3),(3, 5)) maxpoolsizes = ((5, 3),(3, 5), (3, 3))
stridesizes = ((3, 2), (2, 3)) stridesizes = ((3, 2), (2, 3), (3, 3))
paddingsizes = ((2, 2),(2, 1)) paddingsizes = ((2, 2),(2, 1), (2, 2))
for i in range(len(imgsizes)): for i in range(len(imgsizes)):
imgsize = imgsizes[i] imgsize = imgsizes[i]
imval = rng.rand(1, 1, imgsize[0], imgsize[1]) * 10.0 imval = rng.rand(1, 1, imgsize[0], imgsize[1]) * 10.0
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论