【问题标题】:pytorch - Where is “conv1d” implemented?pytorch - “conv1d”在哪里实现?
【发布时间】:2019-05-24 10:32:14
【问题描述】:

我想看看 conv1d 模块是如何实现的 https://pytorch.org/docs/stable/_modules/torch/nn/modules/conv.html#Conv1d。所以我查看了functional.py,但仍然找不到循环和互相关计算。

然后我用关键字“conv1d”搜索了 Github,检查了 conv.cpp https://github.com/pytorch/pytorch/blob/eb5d28ecefb9d78d4fff5fac099e70e5eb3fbe2e/torch/csrc/api/src/nn/modules/conv.cpp 1 但仍然找不到计算发生的位置。

我的问题有两个。

  1. 实现“conv1d”的源码在哪里?

  2. 一般来说,如果我想检查模块是如何实现的,最好在哪里找到?任何指向文档的指针将不胜感激。谢谢。

【问题讨论】:

    标签: pytorch


    【解决方案1】:
    1. 它取决于后端(GPU、CPU、分布式等),但在最有趣的 GPU 案例中,它来自cuDNN,它以二进制格式发布,因此您无法检查其源代码。 CPU MKLDNN 也有类似的情况。我不知道 PyTorch 会在哪里“处理”它自己的卷积核,但我可能错了。 编辑:确实,正如下面的答案中指出的那样,我错了。
    2. 不知道 PyTorch 的结构是很难的。正如here 所解释的,许多代码实际上是根据各种标记文件自动生成的。弄清楚这一点需要大量的跳跃。例如,您要链接的conv.cpp 文件uses torch::conv1d 定义为here 并使用at::convolution,而at::convolution 又使用at::_convolution,它分派到多个变体,例如at::cudnn_convolution。我相信at::cudnn_convolution 是通过标记文件创建的here 并直接插入到cuDNN 实现中(尽管当这种情况发生时我无法确定代码中的确切点)。

    【讨论】:

      【解决方案2】:

      以下是我从pytorch discussion board得到的答案:

      我相信这里定义了“handroll”-ed 卷积:https://github.com/pytorch/pytorch/blob/master/aten/src/THNN/generic/SpatialConvolutionMM.c3

      NN 模块的实现在这里:https://github.com/pytorch/pytorch/tree/master/aten/src GPU版本在THCUNN,CPU版本在THNN

      【讨论】:

        猜你喜欢
        • 2019-02-08
        • 2022-01-21
        • 2020-03-19
        • 1970-01-01
        • 2012-04-13
        • 1970-01-01
        • 2018-12-22
        • 1970-01-01
        • 2019-10-14
        相关资源
        最近更新 更多