小编Pet*_*3rd的帖子

使用特征张量复制 TensorFlow Conv2D 操作

我正在尝试在 c++ 中实现轻量级(最小库依赖性)版本的 TensorFlow 图,并且我正在尝试使用 Eigen Tensor 对象来执行图操作。现在我一直在尝试使用 EigenTensor.convolve()方法来尝试复制 TensorFlow 的 Conv2D 操作的行为。为了简单起见,我最初的 Conv2D 操作没有填充,步幅为 1。

卷积层的输入是一个 51x51x1 张量,它与大小为 3x3x1x16 的滤波器组进行卷积。在张量流中,这会生成大小为 49x49x16 的输出张量。使用下面的特征代码在 C++ 中设置相同的操作仅填充输出张量的第一个通道,因此顶部 49x49x1 单元格包含正确的值,但其余 1-15 个通道不会填充。

  Eigen::TensorMap<Eigen::Tensor<float,4> > filter(filter, 3, 3, 1, 16 );
  Eigen::TensorMap<Eigen::Tensor<float,3> > input(inputBuffer, 51, 51, 1 );
  Eigen::TensorMap<Eigen::Tensor<float,3> > output(outputBuffer, 49, 49, 16);

  Eigen::array<ptrdiff_t, 2> convDims({0, 1});
  output = input.convolve(filter, convDims);
Run Code Online (Sandbox Code Playgroud)

我认为我错误地理解了这些函数的作用,并且它们没有执行相同的操作。为了让我的实现正常工作,我尝试循环遍历 16 个过滤器通道,并将卷积方法单独应用于每个通道,但我遇到了编译器错误,我无法理解以下代码:

  for (int s=0; s<16; ++s)
  {
    Eigen::array<int, 4> fOffset = {0, 0, 0, s};
    Eigen::array<int, 4> fExtent …
Run Code Online (Sandbox Code Playgroud)

python convolution eigen c++11 tensorflow

6
推荐指数
1
解决办法
3020
查看次数

标签 统计

c++11 ×1

convolution ×1

eigen ×1

python ×1

tensorflow ×1