看起来很简单.我本以为某种铸造是可能的,但我似乎找不到任何文件.
虽然我在我的应用程序中找到了避免使用Eigen :: Matrix类的方法,但TensorFlow仅适用于Eigen :: Tensor,而我使用的另一个库只具有直接使用Eigen :: Matrix的功能.如果我可以将Tensor作为矩阵进行投射并使用它,那么代码可读性将是非常壮观的.
编辑:似乎TensorFlow DOES有一个函数来获取Eigen :: Matrix(仍在测试它).也许这会使原始问题变得不那么有趣(也许没有人需要将Tensors转换为Matrices.)但我仍然认为这是一个有效的问题.所以我不会放下我的
编辑2:在一些构建错误之后通过TF文档,似乎tensorflow的Tensor :: matrix()函数只返回一个2d Eigen :: Tensor,所以转换实际上是必要的.
mrr*_*rry 12
这是TensorFlow的线性代数操作的常见用例,可以在其中找到实现tensorflow/core/kernels/linalg_ops_common.cc.但是,该代码是高度模板化的,因此有一个具体的例子可能是有用的.
假设您从一个带元素类型的tensorflow::Tensor被调用开始,您可以按如下方式创建一个特征矩阵:tfloatm
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 */);
Run Code Online (Sandbox Code Playgroud)
如果你的张量来自a的输入tensorflow::OpKernel(例如在Compute()方法中),你将使用略有不同的类型和适当的const限定:
OpKernelContext* ctx = ...;
const tensorflow::Tensor t = ctx->input(...);
const auto m = Eigen::Map<const 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 */);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2546 次 |
| 最近记录: |