6

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?

Alperen AYDIN
  • 547
  • 1
  • 6
  • 17
  • It seems that the question here has part of the answer:http://stackoverflow.com/questions/36044197/how-do-i-pass-an-opencv-mat-into-a-c-tensorflow-graph – Alperen AYDIN Aug 18 '16 at 09:30

1 Answers1

0

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>());
}