c++ - 如何使用 NVIDIA cuDNN 计算 'full' 卷积?

标签 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 执行“完整”卷积?

最佳答案

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

关于c++ - 如何使用 NVIDIA cuDNN 计算 'full' 卷积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37302344/

相关文章:

cuda - 不同的 nvcc 版本使用哪个 g++ 版本?

python - 在keras中对合并层进行训练

使用按位赋值运算符的 C++ 类型转换

c++ - 使用 -> 从对象索引数组访问虚函数

c++ - OpenGL 2D 中的可变形地形 [Worms like]

cuda - 为CPU编译cuda代码

c++ - CUDA 中不同 block 和线程的性能优化

python - Python 中的平滑

c++ - 使用 Intel MKL 的 3D 卷积

c++ - 根据对象属性从 vector 中删除对象