【问题标题】:TensorFlow Conv2D implementation?TensorFlow Conv2D 实现?
【发布时间】:2018-01-12 20:12:25
【问题描述】:

我正在尝试查找实际 Conv2D 操作的实现位置,以便我可以评估内存访问模式。环顾四周,看起来 Conv2D 操作的执行通过 contract() 函数调用进入 Eigen。问题是,我似乎无法在 TensorFlow 或 Eigen 源代码中找到函数的定义或声明。

哪些函数主要负责在 TensorFlow 中执行 Conv2D 操作?我想看看它是如何瘫痪的,一般的内存访问模式是什么,以及原始计算是如何完成的。

此查询专门针对 CPU,因为我已经在一定程度上研究了 GPU 执行。

【问题讨论】:

    标签: tensorflow eigen tensorflow-xla


    【解决方案1】:

    我认为 Conv2dCPU 是在这个文件中使用 Eigen conv ops Line 61 onwards 实现的

    【讨论】:

    • 不是真的,那是操作的设置(为简化的情况调用一些优化的方法)。注意在最后的else 中对functor::SpatialConvolution<Device, T>()(ctx->eigen_device<Device>(), output->tensor<T, 4>(), input.tensor<T, 4>(), filter.tensor<T, 4>(), row_stride, col_stride, padding) 的调用。这开始了函数调用的曲折路径,我似乎无法追溯到某种看起来实际上正在执行乘法/for循环等的结构。
    【解决方案2】:

    contract() 返回一个抽象表达式,其求值在TensorContraction.h 中实现。它本质上是 Eigen 矩阵-矩阵或矩阵-向量乘积之上的包装器。

    【讨论】:

      【解决方案3】:

      经过一番搜索,我发现CPU Conv2D的实际实现在deep_conv2d.cc

      【讨论】:

      • 你知道这个文件中实现的深度卷积和直接卷积有什么区别吗?
      猜你喜欢
      • 2019-09-20
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多