从 Eigen::Tensor 创建张量流::张量
Creating tensorflow::Tensor from Eigen::Tensor
我应该如何从Eigen::Tensor创建一个张量流::张量?我可以一个接一个地复制元素,但我希望有更好的方法。
没有公共 API 可以在不复制数据的情况下从 Eigen::Tensor 创建 tensorflow::Tensor。但是,您可以使用以下 API 创建一个 tensorflow::Tensor 并将其解释为 Eigen::TensorMap:
tensorflow::Tensor tf_tensor(tensor_constructor_args);
// For the general case:
Eigen::TensorMap<type_params> eigen_tensor = tf_tensor.tensor<Type, NumDims>();
// shortcuts if you know the tensor is a matrix/vector/scalar
Eigen::TensorMap<type_params> eigen_matrix = tf_tensor.matrix<Type>();
Eigen::TensorMap<type_params> eigen_vector = tf_tensor.vector<Type>();
Eigen::TensorMap<type_params> eigen_scalar = tf_tensor.scalar<Type>();
这将避免复制。此外,特征张量和张量映射共享相同的 API,因此您可以互换使用它们。
下面是一个可能有用的示例:
Eigen::Tensor<float, 3> TensorflowToEigen(const tensorflow::Tensor& tensor) {
const tensorflow::TensorShape dims = tensor.shape();
Eigen::Tensor<float, 3, Eigen::RowMajor> rm_tensor =
tensor.tensor<float, 3>();
// Change to ColMajor. swap_layout changes the ordering of dimensions, so we
// shuffle them back.
Eigen::Tensor<float, 3> cm_tensor =
rm_tensor.swap_layout().shuffle(Eigen::make_index_list(2, 1, 0));
return cm_tensor;
}
tensorflow::Tensor EigenToTensorflow(const Eigen::Tensor<float, 3>& tensor) {
const Eigen::DSizes<int64_t, 3> dims = tensor.dimensions();
// Change to RowMajor. swap_layout changes the ordering of dimensions, so we
// shuffle them back.
Eigen::Tensor<float, 3, Eigen::RowMajor> rm_tensor =
tensor.swap_layout().shuffle(Eigen::make_index_list(2, 1, 0));
tensorflow::Tensor tf_tensor(
tensorflow::DT_FLOAT,
tensorflow::TensorShape({dims[0], dims[1], dims[2]}));
tf_tensor.tensor<float, 3>() = rm_tensor;
return tf_tensor;
}
相关文章:
- C++中的张量流对象检测
- 在官方张量流 resnet50 模型上运行 tflite 精度工具
- 如何使用 c++ 更改张量流中的per_process_gpu_memory_fraction?
- 编译 GPU 的张量流示例自定义操作
- C++ ABI 兼容性问题/张量流
- 如何从内存缓冲区加载张量流图
- 张量流错误 此文件需要编译器和库支持 ISO C++ 2011 标准
- 部署在张量流中训练的神经网络来火炬C++的最佳方法是什么?
- 微调张量流对象检测预训练模型
- 添加 OP 张量流调试
- 如何通过一次运行将多个输入样本馈送到C++张量流模型
- 未定义的符号'fixed_address_empty_string':带有protobuf的新张量流运算
- F 张量流/核心/common_runtime/device_factory.cc:77]具有相同优先级 210 的 G
- 张量流 c++ API 是否支持反向传播的自动微分?
- 最小工作示例张量流服务客户端
- 从 Eigen::Tensor 创建张量流::张量
- 如何访问张量流::张量C++
- 如何使用 c++ API 获取秩 3 张量流::张量的最大值的索引
- 如何从C++中的原始指针数据构造张量流::张量
- C++从张量流::张量对象访问Eigen::张量类函数