提交 d66a7734 authored 作者: Pascal Lamblin's avatar Pascal Lamblin

Various fixes

- some syntax - In the new backend, GpuDnnConvDesc takes only the kernel shape
上级 041a5d75
...@@ -829,7 +829,7 @@ def dnn_gradweight(img, topgrad, kerns_shp, border_mode='valid', ...@@ -829,7 +829,7 @@ def dnn_gradweight(img, topgrad, kerns_shp, border_mode='valid',
topgrad = gpu_contiguous(topgrad) topgrad = gpu_contiguous(topgrad)
kerns_shp = as_tensor_variable(kerns_shp) kerns_shp = as_tensor_variable(kerns_shp)
desc = GpuDnnConvDesc(border_mode=border_mode, subsample=subsample, desc = GpuDnnConvDesc(border_mode=border_mode, subsample=subsample,
conv_mode=conv_mode)(img.shape, kerns_shp) conv_mode=conv_mode)(kerns_shp)
out = GpuAllocEmpty(img.dtype, ctx_name)(*kerns_shp) out = GpuAllocEmpty(img.dtype, ctx_name)(*kerns_shp)
return GpuDnnConvGradW()(img, topgrad, out, desc) return GpuDnnConvGradW()(img, topgrad, out, desc)
...@@ -841,7 +841,7 @@ def dnn_gradinput(kerns, topgrad, img_shp, border_mode='valid', ...@@ -841,7 +841,7 @@ def dnn_gradinput(kerns, topgrad, img_shp, border_mode='valid',
topgrad = gpu_contiguous(topgrad) topgrad = gpu_contiguous(topgrad)
img_shp = as_tensor_variable(img_shp) img_shp = as_tensor_variable(img_shp)
desc = GpuDnnConvDesc(border_mode=border_mode, subsample=subsample, desc = GpuDnnConvDesc(border_mode=border_mode, subsample=subsample,
conv_mode=conv_mode)(img_shp, kerns.shape) conv_mode=conv_mode)(kerns.shape)
out = GpuAllocEmpty(kerns.dtype, ctx_name)(*img_shp) out = GpuAllocEmpty(kerns.dtype, ctx_name)(*img_shp)
return GpuDnnConvGradI()(kerns, topgrad, out, desc) return GpuDnnConvGradI()(kerns, topgrad, out, desc)
...@@ -1228,7 +1228,7 @@ def local_abstractconv_cudnn(node): ...@@ -1228,7 +1228,7 @@ def local_abstractconv_cudnn(node):
not isinstance(inp2.type, GpuArrayType)): not isinstance(inp2.type, GpuArrayType)):
return None return None
if not dnn_available(): if not dnn_available(inp1.type.context_name):
return None return None
if node.op.filter_flip: if node.op.filter_flip:
...@@ -1258,7 +1258,10 @@ def local_abstractconv_cudnn(node): ...@@ -1258,7 +1258,10 @@ def local_abstractconv_cudnn(node):
conv_mode=conv_mode) conv_mode=conv_mode)
return [rval] return [rval]
conv_groupopt.register(local_abstractconv_cudnn) conv_groupopt.register('local_abstractconv_cudnn',
local_abstractconv_cudnn, 20,
'fast_compile', 'fast_run',
'gpuarray', 'conv_dnn', 'cudnn')
@inplace_allocempty(GpuDnnConv, 2) @inplace_allocempty(GpuDnnConv, 2)
......
...@@ -6,9 +6,9 @@ from nose.plugins.skip import SkipTest ...@@ -6,9 +6,9 @@ from nose.plugins.skip import SkipTest
import theano import theano
from theano.tests import unittest_tools as utt from theano.tests import unittest_tools as utt
import theano.tensor.nnet.abstract_conv2d as conv import theano.tensor.nnet.abstract_conv as conv
from theano.compile import shared as cpu_shared from theano.compile import shared as cpu_shared
from ..type import gpuarray_shared_contructor as gpu_shared from ..type import gpuarray_shared_constructor as gpu_shared
from ..dnn import dnn_available, dnn_conv, dnn_gradweight, dnn_gradinput from ..dnn import dnn_available, dnn_conv, dnn_gradweight, dnn_gradinput
from .config import mode_with_gpu, mode_without_gpu, test_ctx_name from .config import mode_with_gpu, mode_without_gpu, test_ctx_name
...@@ -39,7 +39,7 @@ class TestConv2d(unittest.TestCase): ...@@ -39,7 +39,7 @@ class TestConv2d(unittest.TestCase):
else ((i + 2 * pad - k) // d + 1) else ((i + 2 * pad - k) // d + 1)
for i, k, d, pad in zip(inputs_shape[2:], for i, k, d, pad in zip(inputs_shape[2:],
filters_shape[2:], filters_shape[2:],
subsample, border_mode)) subsample, border_mode)))
def run_fwd(self, inputs_shape, filters_shape, ref=dnn_conv, def run_fwd(self, inputs_shape, filters_shape, ref=dnn_conv,
subsample=(1, 1), verify_grad=True, mode=mode_without_gpu, subsample=(1, 1), verify_grad=True, mode=mode_without_gpu,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论