提交 0ce5393a authored 作者: Frédéric Bastien's avatar Frédéric Bastien

Merge pull request #3368 from kashif/issue-3347

fix shape mismatch in GpuDnnPoolGrad
...@@ -2321,10 +2321,10 @@ if True: ...@@ -2321,10 +2321,10 @@ if True:
(inp_grad.owner and isinstance(inp_grad.owner.op, (inp_grad.owner and isinstance(inp_grad.owner.op,
HostFromGpu))): HostFromGpu))):
desc = GpuDnnPoolDesc(ws=ds, stride=st, mode=mode, pad=pad)() desc = GpuDnnPoolDesc(ws=ds, stride=st, mode=mode, pad=pad)()
contiguous_inp_grad = gpu_contiguous(inp_grad)
ret = GpuDnnPoolGrad()(gpu_contiguous(inp), ret = GpuDnnPoolGrad()(gpu_contiguous(inp),
gpu_contiguous(numpy.empty((1,1,1,1), contiguous_inp_grad,
dtype=numpy.float32)), contiguous_inp_grad,
gpu_contiguous(inp_grad),
desc) desc)
return [host_from_gpu(ret)] return [host_from_gpu(ret)]
......
...@@ -450,24 +450,29 @@ def test_pooling_opt(): ...@@ -450,24 +450,29 @@ def test_pooling_opt():
if not cuda.dnn.dnn_available(): if not cuda.dnn.dnn_available():
raise SkipTest(cuda.dnn.dnn_available.msg) raise SkipTest(cuda.dnn.dnn_available.msg)
x = T.ftensor4() x = T.fmatrix()
f = theano.function( f = theano.function(
[x], [x],
max_pool_2d(x, ds=(2, 2), ignore_border=True), max_pool_2d(x, ds=(2, 2), mode='average_inc_pad', ignore_border=True),
mode=mode_with_gpu) mode=mode_with_gpu)
assert any([isinstance(n.op, cuda.dnn.GpuDnnPool) assert any([isinstance(n.op, cuda.dnn.GpuDnnPool)
for n in f.maker.fgraph.toposort()]) for n in f.maker.fgraph.toposort()])
f(numpy.zeros((10, 10), dtype='float32'))
f = theano.function( f = theano.function(
[x], [x],
T.grad(max_pool_2d(x, ds=(2, 2), ignore_border=True).sum(), x), T.grad(max_pool_2d(x, ds=(2, 2), mode='average_inc_pad',
ignore_border=True).sum(), x),
mode=mode_with_gpu.including("cudnn")) mode=mode_with_gpu.including("cudnn"))
assert any([isinstance(n.op, cuda.dnn.GpuDnnPoolGrad) assert any([isinstance(n.op, cuda.dnn.GpuDnnPoolGrad)
for n in f.maker.fgraph.toposort()]) for n in f.maker.fgraph.toposort()])
f(numpy.zeros((10, 10), dtype='float32'))
class test_DnnSoftMax(test_nnet.test_SoftMax): class test_DnnSoftMax(test_nnet.test_SoftMax):
gpu_op = dnn.GpuDnnSoftmax gpu_op = dnn.GpuDnnSoftmax
......
...@@ -1763,9 +1763,10 @@ def local_avg_pool_dnn_grad_stride(node): ...@@ -1763,9 +1763,10 @@ def local_avg_pool_dnn_grad_stride(node):
mode = node.op.mode mode = node.op.mode
desc = GpuDnnPoolDesc(ws=ds, stride=st, mode=mode, pad=pad)() desc = GpuDnnPoolDesc(ws=ds, stride=st, mode=mode, pad=pad)()
contiguous_inp_grad = gpu_contiguous(inp_grad)
return GpuDnnPoolGrad()(gpu_contiguous(inp), return GpuDnnPoolGrad()(gpu_contiguous(inp),
gpu_contiguous(numpy.empty((1, 1, 1, 1), dtype=numpy.float32)), contiguous_inp_grad,
gpu_contiguous(inp_grad), contiguous_inp_grad,
desc) desc)
......
...@@ -278,24 +278,31 @@ def test_pooling_opt(): ...@@ -278,24 +278,31 @@ def test_pooling_opt():
if not dnn.dnn_available(): if not dnn.dnn_available():
raise SkipTest(dnn.dnn_available.msg) raise SkipTest(dnn.dnn_available.msg)
x = T.ftensor4() x = T.fmatrix()
f = theano.function( f = theano.function(
[x], [x],
max_pool_2d(x, ds=(2, 2), ignore_border=True), max_pool_2d(x, ds=(2, 2), mode='average_inc_pad',
ignore_border=True),
mode=mode_with_gpu) mode=mode_with_gpu)
assert any([isinstance(n.op, dnn.GpuDnnPool) assert any([isinstance(n.op, dnn.GpuDnnPool)
for n in f.maker.fgraph.toposort()]) for n in f.maker.fgraph.toposort()])
f(numpy.zeros((10, 10), dtype='float32'))
f = theano.function( f = theano.function(
[x], [x],
T.grad(max_pool_2d(x, ds=(2, 2), ignore_border=True).sum(), x), T.grad(max_pool_2d(x, ds=(2, 2), mode='average_inc_pad',
ignore_border=True).sum(),
x),
mode=mode_with_gpu.including("cudnn")) mode=mode_with_gpu.including("cudnn"))
assert any([isinstance(n.op, dnn.GpuDnnPoolGrad) assert any([isinstance(n.op, dnn.GpuDnnPoolGrad)
for n in f.maker.fgraph.toposort()]) for n in f.maker.fgraph.toposort()])
f(numpy.zeros((10, 10), dtype='float32'))
def test_dnn_tag(): def test_dnn_tag():
""" """
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论