提交 171aa1d7 authored 作者: Arnaud Bergeron's avatar Arnaud Bergeron

Fix direct calls to GpuDnnConvDesc

上级 fa436a06
...@@ -31,4 +31,5 @@ int conv_desc(PyArrayObject *filt_shp, ...@@ -31,4 +31,5 @@ int conv_desc(PyArrayObject *filt_shp,
err = cudnnSetConvolutionNdDescriptor(*desc, NB_DIMS, pad, strides, upscale, err = cudnnSetConvolutionNdDescriptor(*desc, NB_DIMS, pad, strides, upscale,
CONV_MODE); CONV_MODE);
return 0;
} }
...@@ -27,9 +27,9 @@ def test_dnn_conv_desc_merge(): ...@@ -27,9 +27,9 @@ def test_dnn_conv_desc_merge():
kern_shp = T.as_tensor_variable( kern_shp = T.as_tensor_variable(
numpy.asarray([3, 1, 2, 2]).astype('int64')) numpy.asarray([3, 1, 2, 2]).astype('int64'))
desc1 = dnn.GpuDnnConvDesc(border_mode='valid', subsample=(2, 2), desc1 = dnn.GpuDnnConvDesc(border_mode='valid', subsample=(2, 2),
conv_mode='conv')(img_shp, kern_shp) conv_mode='conv')(kern_shp)
desc2 = dnn.GpuDnnConvDesc(border_mode='full', subsample=(1, 1), desc2 = dnn.GpuDnnConvDesc(border_mode='full', subsample=(1, 1),
conv_mode='cross')(img_shp, kern_shp) conv_mode='cross')(kern_shp)
# CDataType is not DeepCopyable so this will crash if we don't use # CDataType is not DeepCopyable so this will crash if we don't use
# borrow=True # borrow=True
f = theano.function([], [theano.Out(desc1, borrow=True), f = theano.function([], [theano.Out(desc1, borrow=True),
...@@ -51,7 +51,7 @@ def test_dnn_conv_merge(): ...@@ -51,7 +51,7 @@ def test_dnn_conv_merge():
kern = T.ftensor4('kern') kern = T.ftensor4('kern')
out = T.ftensor4('out') out = T.ftensor4('out')
desc = dnn.GpuDnnConvDesc( desc = dnn.GpuDnnConvDesc(
border_mode='valid')(img.shape, kern.shape) border_mode='valid')(kern.shape)
# Test forward op # Test forward op
o1 = dnn.dnn_conv(img, kern) o1 = dnn.dnn_conv(img, kern)
...@@ -90,9 +90,9 @@ def test_dnn_conv_inplace(): ...@@ -90,9 +90,9 @@ def test_dnn_conv_inplace():
kern = T.ftensor4('kern') kern = T.ftensor4('kern')
out = T.ftensor4('out') out = T.ftensor4('out')
desc1 = dnn.GpuDnnConvDesc(border_mode='valid', conv_mode='conv')( desc1 = dnn.GpuDnnConvDesc(border_mode='valid', conv_mode='conv')(
img.shape, kern.shape) kern.shape)
desc2 = dnn.GpuDnnConvDesc( desc2 = dnn.GpuDnnConvDesc(
border_mode='valid', conv_mode='cross')(img.shape, kern.shape) border_mode='valid', conv_mode='cross')(kern.shape)
# Test forward op # Test forward op
o1 = dnn.dnn_conv(img, kern, conv_mode='conv') o1 = dnn.dnn_conv(img, kern, conv_mode='conv')
...@@ -399,7 +399,7 @@ class TestDnnInferShapes(utt.InferShapeTester): ...@@ -399,7 +399,7 @@ class TestDnnInferShapes(utt.InferShapeTester):
border_mode=params[0], border_mode=params[0],
subsample=params[1], subsample=params[1],
conv_mode=params[2] conv_mode=params[2]
)(img.shape, kerns.shape) )(kerns.shape)
conv = dnn.GpuDnnConv()(img, kerns, out, desc) conv = dnn.GpuDnnConv()(img, kerns, out, desc)
self._compile_and_check( self._compile_and_check(
[img, kerns, out], [img, kerns, out],
...@@ -443,7 +443,7 @@ class TestDnnInferShapes(utt.InferShapeTester): ...@@ -443,7 +443,7 @@ class TestDnnInferShapes(utt.InferShapeTester):
border_mode=params[0], border_mode=params[0],
subsample=params[1], subsample=params[1],
conv_mode=params[2] conv_mode=params[2]
)(temp_img.shape, out.shape) )(out.shape)
conv_grad_w = dnn.GpuDnnConvGradW()( conv_grad_w = dnn.GpuDnnConvGradW()(
temp_img, temp_img,
temp_kerns, temp_kerns,
...@@ -487,7 +487,7 @@ class TestDnnInferShapes(utt.InferShapeTester): ...@@ -487,7 +487,7 @@ class TestDnnInferShapes(utt.InferShapeTester):
border_mode=params[0], border_mode=params[0],
subsample=params[1], subsample=params[1],
conv_mode=params[2] conv_mode=params[2]
)(out.shape, kerns.shape) )(kerns.shape)
conv_grad_i = dnn.GpuDnnConvGradI()( conv_grad_i = dnn.GpuDnnConvGradI()(
kerns, kerns,
out, out,
...@@ -660,18 +660,18 @@ def test_dnn_conv_grad(): ...@@ -660,18 +660,18 @@ def test_dnn_conv_grad():
def dconv(img, kern, out): def dconv(img, kern, out):
desc = dnn.GpuDnnConvDesc(border_mode='valid', subsample=(1, 1), desc = dnn.GpuDnnConvDesc(border_mode='valid', subsample=(1, 1),
conv_mode='conv')(img.shape, kern.shape) conv_mode='conv')(kern.shape)
return dnn.GpuDnnConv()(img, kern, out, desc, alpha=0.5, beta=0.75) return dnn.GpuDnnConv()(img, kern, out, desc, alpha=0.5, beta=0.75)
def dconvi(img, kern, out): def dconvi(img, kern, out):
desc = dnn.GpuDnnConvDesc(border_mode='valid', subsample=(1, 1), desc = dnn.GpuDnnConvDesc(border_mode='valid', subsample=(1, 1),
conv_mode='conv')(img.shape, kern.shape) conv_mode='conv')(kern.shape)
return dnn.GpuDnnConvGradI()(kern, out, img, desc, alpha=-1.0, return dnn.GpuDnnConvGradI()(kern, out, img, desc, alpha=-1.0,
beta=0.0) beta=0.0)
def dconvw(img, kern, out): def dconvw(img, kern, out):
desc = dnn.GpuDnnConvDesc(border_mode='valid', subsample=(1, 1), desc = dnn.GpuDnnConvDesc(border_mode='valid', subsample=(1, 1),
conv_mode='conv')(img.shape, kern.shape) conv_mode='conv')(kern.shape)
return dnn.GpuDnnConvGradW()(img, out, kern, desc, alpha=0.75, return dnn.GpuDnnConvGradW()(img, out, kern, desc, alpha=0.75,
beta=-1.0) beta=-1.0)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论