def _oper_gpu(cls, x, w, b, in_shape, out_shape, kernel, stride, padding, dilation): N = x.shape[0] conv_desc = cu.ConvolutionDescriptor(padding, stride, dilation, precision) filter_desc = cu.FilterDescriptor(w.shape, precision) y = GPUValue(shape=tuple([ N, ] + list(out_shape))) with cu.cudnn_handler() as handle: cu.cuConvolutionForward(handle, conv_desc, filter_desc, get_gpu(x), get_gpu(w), y) if b is not None: cu.cu_add_bias(get_gpu(b), y) # assert type(x) is not np.ndarray ret = cls._create_node(y) ret.attrs._conv_desc = conv_desc ret.attrs._filter_desc = filter_desc ret.attrs._x = x ret.attrs._w = w ret.attrs._b = b ret.attrs._in_shape = in_shape ret.attrs._out_shape = out_shape ret.attrs._kernel = kernel ret.attrs._stride = stride ret.attrs._padding = padding ret.attrs._dilation = dilation return ret
def _oper_gpu(cls, x, w, b, in_shape, kernel, stride, padding): conv_desc = cu.ConvolutionNDescriptor(padding, stride, precision) filter_desc = cu.NdFilterDescriptor(w.shape, precision) output_shape = [x.shape[0], w.shape[0]] for i in range(len(x.shape[2:])): output_shape.append( (x.shape[i + 2] + padding[i] * 2 - kernel[i]) // stride[i] + 1) y = GPUValue(shape=tuple(output_shape)) with cu.cudnn_handler() as handle: cu.cuConvolutionForward(handle, conv_desc, filter_desc, get_gpu(x), get_gpu(w), y) if b is not None: cu.cu_add_bias(get_gpu(b), y) # assert type(x) is not np.ndarray ret = cls._create_node(y) ret.attrs._conv_desc = conv_desc ret.attrs._filter_desc = filter_desc ret.attrs._x = x ret.attrs._w = w ret.attrs._b = b return ret
def _oper_gpu(cls, x, w, b, in_shape, out_shape, kernel, stride, padding, dilation): conv_desc = cu.ConvolutionDescriptor(padding, stride, dilation, precision) filter_desc = cu.FilterDescriptor(w.shape, precision) N = x.shape[0] z = GPUValue(shape=tuple([ N, ] + list(out_shape))) with cu.cudnn_handler() as handle: cu.cuConvolutionBackwardData(handle, conv_desc, filter_desc, get_gpu(w), get_gpu(x), z) if b is not None: cu.cu_add_bias(get_gpu(b), z) ret = cls._create_node(z) ret.attrs._conv_desc = conv_desc ret.attrs._filter_desc = filter_desc ret.attrs._x = x ret.attrs._w = w ret.attrs._b = b return ret