提交 2b8457dc authored 作者: --global's avatar --global

Init output memory for DnnPoolGrad

上级 6a638446
...@@ -1485,6 +1485,16 @@ if (CudaNdarray_prep_output(&%(output_grad)s, ...@@ -1485,6 +1485,16 @@ if (CudaNdarray_prep_output(&%(output_grad)s,
%(fail)s %(fail)s
} }
// Init output memory with 0s because cudnnPoolingBackward does not support
// uninitialized memory.
if (cudaSuccess != cudaMemset(CudaNdarray_DEV_DATA(%(output_grad)s), 0,
CudaNdarray_SIZE(%(output_grad)s) *
sizeof(float))){
PyErr_SetString(PyExc_RuntimeError,
"GpuDnnPoolGrad: Error initializing output memory.");
%(fail)s
}
if (c_set_tensorNd(%(output_grad)s, %(output_grad_desc)s) != 0) if (c_set_tensorNd(%(output_grad)s, %(output_grad_desc)s) != 0)
%(fail)s %(fail)s
...@@ -1517,7 +1527,7 @@ if (err%(name)s != CUDNN_STATUS_SUCCESS) { ...@@ -1517,7 +1527,7 @@ if (err%(name)s != CUDNN_STATUS_SUCCESS) {
output_grad_desc="output_grad"+name) output_grad_desc="output_grad"+name)
def c_code_cache_version(self): def c_code_cache_version(self):
return (6, version()) return (7, version())
def infer_shape(self, node, shape): def infer_shape(self, node, shape):
return [shape[0]] return [shape[0]]
......
...@@ -378,12 +378,18 @@ def test_pooling3d(): ...@@ -378,12 +378,18 @@ def test_pooling3d():
a = f1(data).__array__() a = f1(data).__array__()
b = f2(data).__array__() b = f2(data).__array__()
assert numpy.allclose(a, b,
atol=numpy.finfo(numpy.float32).eps) utt.assert_allclose(a, b,
atol=numpy.finfo(numpy.float32).eps)
# Test the grad # Test the grad
for shp in [(1, 1, 2, 2, 2), for shp in [(1, 1, 2, 2, 2),
(1, 1, 3, 3, 3)]: (1, 1, 3, 3, 3),
(1, 1, 3, 3, 4),
(1, 1, 3, 4, 3),
(1, 1, 4, 3, 3),
(1, 1, 4, 4, 4),
(1, 1, 5, 5, 5)]:
data = numpy.random.normal(0, 1, shp).astype("float32") * 10 data = numpy.random.normal(0, 1, shp).astype("float32") * 10
ws = 2 ws = 2
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论