如何计算一个完整的'与NVIDIA cuDNN卷积?

时间:2016-05-18 14:17:54

标签: c++ cuda convolution cudnn

我正在测试NVIDIA cuDNN库中的简单问题。我试图实现一些我认为简单的事情,做一个完整的'卷积。我已经能够计算出有效的'使用前向算法进行卷积而没有太多问题,但我对“完全”的后向算法无法做同样的事情。卷积。

我已为我的输入,内核和卷积准备了张量,并尝试过:

cudnnConvolutionBackwardData(handle.get(),
    alpha, //Set to 1.0
    filter, //Filter descriptor
    kernel_gpu_memory,
    input_tensor, //The input tensor descriptor
    input_gpu_memory,
    convolution, //The convolution descriptor
    conv_algo, //Obtained with getConvolutionBackwardDataAlgorithm
    workspace_cpu_memory, 
    workspace_size, //Obtained with getConvolutionBackwardDataWorkspaceSize
    beta, //Set to 0.0
    output_tensor, //The output tensor descriptor
    conv_gpu_memory);

我已经检查了所有CUDA呼叫的返回,我没有错误,但结果不是正确的'完整'卷积。我将获得的结果与“满”的结果进行比较。 matlab的卷积。

我想这不符合我的预期。我应该尝试使用convolutionBackwardFilter算法吗?

我怎样才能表现出完整的'与cudnn卷积?

1 个答案:

答案 0 :(得分:2)

我明白了。默认情况下,他们认为权重在操作之前已被翻转。因此,必须将其配置为CUDNN_CROSS_CORRELATION而不是CUDNN_CONVOLUTION。