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

时间:2016-08-17 18:46:10

标签: c++ tensorflow eigen

所以,让我说我有一个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&#39;到Eigen :: TensorMap,16&gt; :: Scalar {aka float}&#39;在任务中

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

我在这里缺少什么?

1 个答案:

答案 0 :(得分: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>());
}