简体   繁体   中英

In Tensorflow's C++ API, how do I use an Eigen Tensor to set my Tensorflow Tensor?

So let's say I have a 4D Eigen::Tensor T.

Similarly I also have a 4D Tensorflow::Tensor X with the same shape as T

  int size = T.dimension(0);
  int rows = T.dimension(1);
  int cols = T.dimension(2);
  int channels = T.dimension(3);

  TensorShape TS;
  TS.AddDim(size);
  TS.AddDim(rows);
  TS.AddDim(cols);
  TS.AddDim(size);

  Tensor x( DT_FLOAT, TS);

Now I want to put the data in T in x.

So I try to do:

  x.matrix<float>()() = T;

But the compiler yells at me when I do thqt:

cannot convert 'Eigen::Tensor' to 'Eigen::TensorMap, 16>::Scalar {aka float}' in assignment

When I try to convert T to a TensorMap I get even more error.

What am I missing here?

I think the problem is you are using '.matrix', which only return 2d matrix.

template <typename T>
  typename TTypes<T>::Matrix matrix() {
    return tensor<T, 2>();
  }

You should use '.tensor', which can return Nd matrix.

template <typename T, size_t NDIMS>
typename TTypes<T, NDIMS>::Tensor Tensor::tensor() {
  CheckTypeAndIsAligned(DataTypeToEnum<T>::v());
  return typename TTypes<T, NDIMS>::Tensor(base<T>(),
                                           shape().AsEigenDSizes<NDIMS>());
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM