在Tensorflow的C++ API中,如何使用Eigen Tensor来设置我的Tensorflow Tensor?

6

假设我有一个4D的Eigen::Tensor T。

同样地,我也有一个4D的Tensorflow::Tensor X,与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);

现在我想将 T 中的数据放入 x 中。

所以我尝试执行以下操作:

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

但当我这样做时,编译器会报错:

无法将'Eigen::Tensor'转换为'Eigen::TensorMap<16> ::Scalar {aka float}'在赋值中。

当我尝试将T转换为TensorMap时,出现更多错误。

我漏掉了什么?


这里似乎有部分答案:https://dev59.com/zloV5IYBdhLWcg3wmPvp - Alperen AYDIN
1个回答

0
我认为问题在于你正在使用'.matrix',它只返回2D矩阵。
template <typename T>
  typename TTypes<T>::Matrix matrix() {
    return tensor<T, 2>();
  }

你应该使用'.tensor',它可以返回Nd矩阵。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接