【问题标题】:How to compute a 'full' convolution with NVIDIA cuDNN?如何使用 NVIDIA cuDNN 计算“完整”卷积?
【发布时间】:2016-05-18 14:17:54
【问题描述】:

我正在针对简单问题测试 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 的“完整”卷积进行比较。

我猜这并没有达到我的预期。我应该尝试卷积BackwardFilter算法吗?

如何使用 cudnn 执行“完整”卷积?

【问题讨论】:

  • 我们不是通灵者。结果“应该”是什么,结果是什么?请先尝试真正简单的问题,例如全零或全一输入,并且仅将单个元素设置为一。

标签: c++ cuda convolution cudnn


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 2013-04-16
    相关资源
    最近更新 更多