在C ++中,如何从Tensor :: tensor中切出张量?

时间:2019-04-20 08:54:22

标签: c++ tensorflow slice tensor

我有一个Tensor :: tensor,我将对其进行多次切片并即时修改其值。切分后的值将被馈送到网络中。因此,我需要一种高效而优雅的方法来进行切片和送料操作。

我使用的是C ++版本的tensorflow,Python中最直观的方式就像使用numpy的arr [:, h:h + 3,w:w + 3,:]和feeddict一样。

但是在c ++中,像这样

for h{
   for w{
         for i in range 3{
             for j in range 3{
                 new_tensor(i,j) = m_tensor(h+i,w+j)
             }
         }
         out = sess->run(out_node, in:new_tensor)
         m_tensor(h,w) = out.xxx
   }
}

方法不如我预期的那么优雅。

  1. 获取切片

起初,我尝试使用Eigen :: tensor的slice操作将其直接馈送到Tensor :: tenser,但是奇怪的错误阻止了它的编译

https://bitbucket.org/eigen/eigen/src/default/unsupported/Eigen/CXX11/src/Tensor/README.md?fileviewer=file-view-default#markdown-header-operation-chipconst-index-offset-const-index-dim

然后我认为可以,我将其切成薄片然后复制到张量中。

  1. 将其转换为张量

其中显示最多的结果是:

std::copy_n(vec.begin(), vec.size(), input.flat<float>().data())

std::memcpy(input.flat<float>().data(), vec.data(), input.NumElements() * sizeof(float))

我期望将值分配给张量然后馈入网络的更快方法,是否有更直观的方法? 以下是我要加速的部分。

         for i in range 3{
             for j in range 3{
                 new_tensor(i,j) = m_tensor(h+i,w+j)
             }
         }

0 个答案:

没有答案