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

Alp*_*DIN 6 c++ eigen tensorflow

假设我有一个4D Eigen :: TensorT。

同样,我也有一个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);
Run Code Online (Sandbox Code Playgroud)

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

所以我尝试做:

  x.matrix<float>()() = T;
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,编译器对我大喊:

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

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

我在这里想念什么?

小智 0

我认为问题是您正在使用“.matrix”,它只返回二维矩阵。

template <typename T>
  typename TTypes<T>::Matrix matrix() {
    return tensor<T, 2>();
  }
Run Code Online (Sandbox Code Playgroud)

您应该使用“.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>());
}
Run Code Online (Sandbox Code Playgroud)