Beispiel #1
0
def get_pool2d_desc(ksize, stride, pad, mode):
    """Create a 2d pooling descriptor."""
    desc = libcudnn.cudnnCreatePoolingDescriptor()
    libcudnn.cudnnSetPooling2dDescriptor(desc, libcudnn.cudnnPoolingMode[mode],
                                         ksize[0], ksize[1], pad[0], pad[1],
                                         stride[0], stride[1])
    return Auto(desc, libcudnn.cudnnDestroyPoolingDescriptor)
Beispiel #2
0
def get_pool2d_desc(ksize, stride, pad, mode):
    """Create a 2d pooling descriptor."""
    desc = libcudnn.cudnnCreatePoolingDescriptor()
    libcudnn.cudnnSetPooling2dDescriptor(
        desc, libcudnn.cudnnPoolingMode[mode], ksize[0], ksize[1],
        pad[0], pad[1], stride[0], stride[1])
    return Auto(desc, libcudnn.cudnnDestroyPoolingDescriptor)
Beispiel #3
0
    def configure(self, input):
        
        in_images = input.shape[0]
        in_channels = input.shape[1]
        in_height = input.shape[2]
        in_width = input.shape[3]

        assert(in_width >= self.kW)
        assert(in_height >= self.kH)

        out_width  = int((math.floor(1.0 * in_width - self.kW + 2*self.padW) / self.dW) + 1)
        out_height = int((math.floor(1.0 * in_height - self.kH + 2*self.padH) / self.dH) + 1)

        self.output = GPUTensor( (in_images, in_channels, out_height, out_width), input.dtype ) 

        if self.pool_desc:
            libcudnn.cudnnDestroyPoolingDescriptor(self.pool_desc)
        if self.in_desc:
            libcudnn.cudnnDestroyTensorDescriptor(self.in_desc)
        if self.out_desc:
            libcudnn.cudnnDestroyTensorDescriptor(self.out_desc)

        self.in_desc = input.get_cudnn_tensor_desc()
        self.out_desc = self.output.get_cudnn_tensor_desc()

        self.pool_desc = libcudnn.cudnnCreatePoolingDescriptor()
        libcudnn.cudnnSetPooling2dDescriptor(self.pool_desc,
            libcudnn.cudnnPoolingMode["CUDNN_POOLING_MAX"],
            # libcudnn.cudnnNanPropagation["CUDNN_NOT_PROPAGATE_NAN"],
            self.kH, self.kW, self.padH, self.padW, self.dH, self.dW)
Beispiel #4
0
    def configure(self, input):

        in_images = input.shape[0]
        in_channels = input.shape[1]
        in_height = input.shape[2]
        in_width = input.shape[3]

        assert (in_width >= self.kW)
        assert (in_height >= self.kH)

        out_width = int((math.floor(1.0 * in_width - self.kW + 2 * self.padW) /
                         self.dW) + 1)
        out_height = int(
            (math.floor(1.0 * in_height - self.kH + 2 * self.padH) / self.dH) +
            1)

        self.output = GPUTensor(
            (in_images, in_channels, out_height, out_width), input.dtype)

        if self.pool_desc:
            libcudnn.cudnnDestroyPoolingDescriptor(self.pool_desc)
        if self.in_desc:
            libcudnn.cudnnDestroyTensorDescriptor(self.in_desc)
        if self.out_desc:
            libcudnn.cudnnDestroyTensorDescriptor(self.out_desc)

        self.in_desc = input.get_cudnn_tensor_desc()
        self.out_desc = self.output.get_cudnn_tensor_desc()

        self.pool_desc = libcudnn.cudnnCreatePoolingDescriptor()
        libcudnn.cudnnSetPooling2dDescriptor(
            self.pool_desc,
            libcudnn.cudnnPoolingMode["CUDNN_POOLING_MAX"],
            # libcudnn.cudnnNanPropagation["CUDNN_NOT_PROPAGATE_NAN"],
            self.kH,
            self.kW,
            self.padH,
            self.padW,
            self.dH,
            self.dW)
Beispiel #5
0
kH = 2
dW = 1
dH = 1
padW = 0
padH = 0
in_width = x.shape[3]
in_height = x.shape[2]

out_width = int((math.floor(1.0 * in_width - kW + 2 * padW) / dW) + 1)
out_height = int((math.floor(1.0 * in_height - kH + 2 * padH) / dH) + 1)

print("Ot:", out_width, out_height)

y = GPUTensor((1, 1, out_height, out_width))
y_desc = y.get_cudnn_tensor_desc()
print(y_desc)

pool_desc = libcudnn.cudnnCreatePoolingDescriptor()
libcudnn.cudnnSetPooling2dDescriptor(
    pool_desc, libcudnn.cudnnPoolingMode["CUDNN_POOLING_MAX"], kH, kW, padH,
    padW, dH, dW)

alpha = 1.0
beta = 0.0
libcudnn.cudnnPoolingForward(cudnn_context, pool_desc, alpha, x_desc.ptr,
                             x.get_gpu_voidp(), beta, y_desc.ptr,
                             y.get_gpu_voidp())
print("SHAPE:", y_desc.shape)

print(y.get())
Beispiel #6
0
kH = 2
dW = 1
dH = 1
padW = 0
padH = 0
in_width = x.shape[3]
in_height = x.shape[2]

out_width  = int((math.floor(1.0 * in_width - kW + 2*padW) / dW) + 1)
out_height = int((math.floor(1.0 * in_height - kH + 2*padH) / dH) + 1)

print("Ot:", out_width, out_height)

y = GPUTensor((1,1,out_height, out_width))
y_desc = y.get_cudnn_tensor_desc()
print(y_desc)

pool_desc = libcudnn.cudnnCreatePoolingDescriptor()
libcudnn.cudnnSetPooling2dDescriptor(pool_desc,
    libcudnn.cudnnPoolingMode["CUDNN_POOLING_MAX"],
    kH, kW, padH, padW, dH, dW)


alpha = 1.0
beta = 0.0
libcudnn.cudnnPoolingForward(cudnn_context, pool_desc, alpha,
        x_desc.ptr, x.get_gpu_voidp(), beta, y_desc.ptr, y.get_gpu_voidp())
print("SHAPE:", y_desc.shape)

print(y.get())