代码之家  ›  专栏  ›  技术社区  ›  aerin

Pythorch-在哪里实施__conv1d__?

  •  5
  • aerin  · 技术社区  · 6 年前

    我想看看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. 一般来说,如果我想检查模块是如何实现的,那么最好在哪里找到呢?任何指向文件的指针将不胜感激。谢谢您。

    2 回复  |  直到 6 年前
        1
  •  7
  •   Jatentaki    6 年前
    1. 它依赖于后端(GPU、CPU、分布式等),但在最有趣的GPU案例中,它是从 cuDNN 它以二进制格式发布,因此您无法检查其源代码。对CPU来说也是一个类似的故事 MKLDNN .我不知道PyTorch会在哪里“手摇”它自己的卷积内核,但我可能是错的。 编辑 :的确,我错了,正如下面的答案所指出的。
    2. 不知道pytorch的结构很难。正如所解释的,许多代码实际上是基于各种标记文件自动生成的。 here . 要想弄清楚这一点,需要进行大量的跳跃。例如, conv.cpp 正在链接的文件 uses torch::conv1d ,定义为 here 及用途 at::convolution 反过来使用 at::_convolution 例如,它发送到多个变量 at::cudnn_convolution . At::Cudnn_卷积 我相信是创造出来的 here 通过标记文件直接插入 cuDNN 实现(尽管我不能在代码中准确地指出发生这种情况时的具体点)。
        2
  •  2
  •   aerin    6 年前

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

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

    NN模块实现如下: https://github.com/pytorch/pytorch/tree/master/aten/src GPU版本为THCUnn,CPU版本为THnn