如何将2D Eigen :: Tensor更改为Eigen :: Matrix

时间:2016-09-13 17:00:18

标签: tensorflow eigen3

看起来很简单。我本以为某种铸造是可能的,但我似乎找不到任何文件。

虽然我在我的应用程序中找到了避免使用Eigen :: Matrix类的方法,但TensorFlow仅适用于Eigen :: Tensor,而我使用的另一个库只具有直接使用Eigen :: Matrix的功能。如果我可以将Tensor作为一个矩阵并将其与之结合使用,那么代码可读性将会非常壮观。

编辑:似乎TensorFlow有一个函数来获取Eigen :: Matrix(仍在测试它)。也许这会使原始问题变得不那么有趣(也许没有人需要将Tensors转换为Matrices。)但我仍然认为这是一个有效的问题。所以我不会放下我的

编辑2:在一些构建错误之后通过TF文档,似乎tensorflow的Tensor :: matrix()函数只返回一个2d Eigen :: Tensor,所以转换实际上是必要的。

1 个答案:

答案 0 :(得分:12)

这是TensorFlow的线性代数操作的常见用例,可以在tensorflow/core/kernels/linalg_ops_common.cc中找到实现。但是,该代码是高度模板化的,因此有一个具体的例子可能是有用的。

假设您从名为tensorflow::Tensor的{​​{1}}开始,元素类型为t,您可以按如下方式创建一个特征矩阵float

m

如果您的张量来自tensorflow::Tensor t = ...; auto m = Eigen::Map<Eigen::Matrix< float, /* scalar element type */ Eigen::Dynamic, /* num_rows is a run-time value */ Eigen::Dynamic, /* num_cols is a run-time value */ Eigen::RowMajor /* tensorflow::Tensor is always row-major */>>( t.flat<float>().data(), /* ptr to data */ t.dim_size(0), /* num_rows */ t.dim_size(1) /* num_cols */); 的输入(例如,在tensorflow::OpKernel方法中),您将使用略有不同的类型并具有相应的Compute()限定条件:

const