首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“conv1d”在哪里实现?

“conv1d”在哪里实现?
EN

Stack Overflow用户
提问于 2018-12-26 04:16:45
回答 2查看 1.7K关注 0票数 6

我想看看conv1d模块是如何实现模块/torch/nn/modules/con.html#Conv1d的。因此,我看了functional.py,但仍然找不到循环和互相关计算。

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

我的问题是双重的。

  1. 实现“conv1d”的源代码在哪里?
  2. 一般来说,如果我想检查模块是如何实现的,哪里是最好的位置?任何指向文档的指针都将不胜感激。谢谢。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-26 08:37:27

  1. 它依赖于后端(GPU、CPU、分布式等),但在最有趣的GPU情况下,它是从cuDNN中提取出来的,它是以二进制格式发布的,因此您无法检查它的源代码。对于CPU MKLDNN来说,这是一个类似的故事。我不知道有任何地方PyTorch会“手卷”它自己的卷积内核,但我可能是错的。编辑:确实,我错了,在下面的回答中指出了这一点。
  2. 如果不知道PyTorch是如何构造的,这是很困难的。许多代码实际上是基于各种标记文件自动生成的,正如这里所解释的那样。要想弄明白这一点需要大量的跳跃。例如,您要链接的conv.cpp文件是使用 torch::conv1d,它定义了这里,使用了at::convolution,而at::convolution又使用at::_convolution,后者分配给多个变体,例如at::cudnn_convolution。我相信,at::cudnn_convolution是通过一个标记文件创建的,它只是直接插入到cuDNN实现中(尽管我不能精确地指出发生这种情况时代码中的确切点)。
票数 8
EN

Stack Overflow用户

发布于 2018-12-28 19:23:41

下面是我从火炬讨论板那里得到的答案

我相信“手卷”-ed卷积是在这里定义的:https://github.com/pytorch/pytorch/blob/master/aten/src/THNN/generic/SpatialConvolutionMM.c 3

NN模块实现如下:https://github.com/pytorch/pytorch/tree/master/aten/src,GPU版本在THCUNN中,CPU版本在THNN中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53927358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档