提交 2dabc825 authored 作者: Alexander Matyasko's avatar Alexander Matyasko

Return max pool grad grad for now instead of rop

上级 2b0b7acd
...@@ -124,9 +124,13 @@ class GpuPool(CGpuKernelBase): ...@@ -124,9 +124,13 @@ class GpuPool(CGpuKernelBase):
# return None for those. # return None for those.
if eval_points[0] is None: if eval_points[0] is None:
return [None] return [None]
z = self(*inputs)
x, ws, stride, pad = inputs x, ws, stride, pad = inputs
rop = GpuMaxPoolRop(ignore_border=self.ignore_border) return [
return [rop(x, eval_points[0], ws, stride=stride, pad=pad)] GpuDownsampleFactorMaxGradGrad(self.ignore_border, self.mode,
self.ndim)(x, z, eval_points[0], ws,
stride, pad)
]
class GpuMaxPoolGrad(CGpuKernelBase): class GpuMaxPoolGrad(CGpuKernelBase):
......
...@@ -8,13 +8,13 @@ import numpy ...@@ -8,13 +8,13 @@ import numpy
import theano import theano
from theano import gradient from theano import gradient
from theano import tensor from theano import tensor
from theano.tensor.signal.pool import (Pool, MaxPoolGrad, AveragePoolGrad, MaxPoolRop, from theano.tensor.signal.pool import (Pool, MaxPoolGrad, AveragePoolGrad,
DownsampleFactorMaxGradGrad) DownsampleFactorMaxGradGrad)
from theano.tests import unittest_tools as utt from theano.tests import unittest_tools as utt
from .config import mode_with_gpu, mode_without_gpu from .config import mode_with_gpu, mode_without_gpu
from .test_basic_ops import rand from .test_basic_ops import rand
from ..pool import (GpuPool, GpuMaxPoolGrad, GpuAveragePoolGrad, GpuMaxPoolRop, from ..pool import (GpuPool, GpuMaxPoolGrad, GpuAveragePoolGrad,
GpuDownsampleFactorMaxGradGrad) GpuDownsampleFactorMaxGradGrad)
...@@ -144,11 +144,11 @@ def test_pool2d(): ...@@ -144,11 +144,11 @@ def test_pool2d():
gr2 = theano.function([], tensor.Rop(a_pooled, a, ea), mode=ref_mode) gr2 = theano.function([], tensor.Rop(a_pooled, a, ea), mode=ref_mode)
assert any([ assert any([
isinstance(node.op, GpuMaxPoolRop) isinstance(node.op, GpuDownsampleFactorMaxGradGrad)
for node in gr.maker.fgraph.toposort() for node in gr.maker.fgraph.toposort()
]) ])
assert any([ assert any([
isinstance(node.op, MaxPoolRop) isinstance(node.op, DownsampleFactorMaxGradGrad)
for node in gr2.maker.fgraph.toposort() for node in gr2.maker.fgraph.toposort()
]) ])
assert numpy.allclose(gr(), gr2()), (shp, ws, st, pad, mode, ignore_border) assert numpy.allclose(gr(), gr2()), (shp, ws, st, pad, mode, ignore_border)
...@@ -254,11 +254,11 @@ def test_pool3d(): ...@@ -254,11 +254,11 @@ def test_pool3d():
gr2 = theano.function([], tensor.Rop(a_pooled, a, ea), mode=ref_mode) gr2 = theano.function([], tensor.Rop(a_pooled, a, ea), mode=ref_mode)
assert any([ assert any([
isinstance(node.op, GpuMaxPoolRop) isinstance(node.op, GpuDownsampleFactorMaxGradGrad)
for node in gr.maker.fgraph.toposort() for node in gr.maker.fgraph.toposort()
]) ])
assert any([ assert any([
isinstance(node.op, MaxPoolRop) isinstance(node.op, DownsampleFactorMaxGradGrad)
for node in gr2.maker.fgraph.toposort() for node in gr2.maker.fgraph.toposort()
]) ])
assert numpy.allclose(gr(), gr2()), (shp, ws, st, pad, mode, ignore_border) assert numpy.allclose(gr(), gr2()), (shp, ws, st, pad, mode, ignore_border)
......
...@@ -592,9 +592,13 @@ class Pool(OpenMPOp): ...@@ -592,9 +592,13 @@ class Pool(OpenMPOp):
# return None for those. # return None for those.
if eval_points[0] is None: if eval_points[0] is None:
return [None] return [None]
z = self(*inputs)
x, ws, stride, pad = inputs x, ws, stride, pad = inputs
rop = MaxPoolRop(ignore_border=self.ignore_border, ndim=self.ndim) return [
return [rop(x, eval_points[0], ws, stride=stride, pad=pad)] DownsampleFactorMaxGradGrad(self.ignore_border, self.mode,
self.ndim)(x, z, eval_points[0], ws,
stride, pad)
]
def c_headers(self): def c_headers(self):
headers = ['<algorithm>'] headers = ['<algorithm>']
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论