tensorflow::Tensor 到 python 张量或 numpy.nd_array
tensorflow::Tensor to python Tensor or numpy.nd_array
我有一个 C++ tensorflow::Tensor
,我试图在 Python 中访问其内容。
我查看了 Tensorflow C++ Documentation 以寻找可以将 tensorflow::Tensor
转换为任何合理的 PyObject
的函数(目前这是否是 tf.Tensor
或 numpy.nd_array
).
通过 Tensorflow 代码查看后,我发现了以下线索:
在 tensorflow/python/client/tf_session_helper.cc
中定义了一个方法 TF_Tensor_to_PyObject(TF_Tensor* Tensor, PyObject** out_array)
。然而,这是在一个隐藏的 Bazel 包中定义的,而且是在一个匿名的 C++ 命名空间中定义的。修改 Tensorflow 本身似乎不直观(我必须修改 Bazel BUILD 文件、.h 和 .cc 文件),并编译我自己的 Tensorflow 以使用此方法。
此方法的另一个问题是 TF_Tensor
!= tensorflow::Tensor
。 TF_Tensor
是在 Tensorflow 的 C-Api 中定义的,在那里,转换也不打算用于 public 使用(如:在这个包之外)。
有人知道更好的方法吗?我在搜索时没有找到 tensorflow::Tensor
到 PyObject
的现有实现吗?
py_func 操作的实现有 code to convert Tensor to PyObject。
更准确地说,应该执行以下操作:
#include "tensorflow/python/lib/core/py_func.h"
Status TensorHandler::ExportTensorAsNumpy(const Tensor *inputTensor) {
PyObject* numpyObject = Py_None;
tensorflow::ConvertTensorToNdarray(*inputTensor, &numpyObject);
//process the numpy further its now stored in numpyObject
//call this when you don't use the numpyObject anymore
Py_DECREF(numpyObject);
}
当你不使用 numpy 对象时不要忘记调用 Py_DECREF 否则你的程序会导致内存泄漏。也不要忘记在你的 bazel 构建中包含 py_func 作为依赖项。
我有一个 C++ tensorflow::Tensor
,我试图在 Python 中访问其内容。
我查看了 Tensorflow C++ Documentation 以寻找可以将 tensorflow::Tensor
转换为任何合理的 PyObject
的函数(目前这是否是 tf.Tensor
或 numpy.nd_array
).
通过 Tensorflow 代码查看后,我发现了以下线索:
在 tensorflow/python/client/tf_session_helper.cc
中定义了一个方法 TF_Tensor_to_PyObject(TF_Tensor* Tensor, PyObject** out_array)
。然而,这是在一个隐藏的 Bazel 包中定义的,而且是在一个匿名的 C++ 命名空间中定义的。修改 Tensorflow 本身似乎不直观(我必须修改 Bazel BUILD 文件、.h 和 .cc 文件),并编译我自己的 Tensorflow 以使用此方法。
此方法的另一个问题是 TF_Tensor
!= tensorflow::Tensor
。 TF_Tensor
是在 Tensorflow 的 C-Api 中定义的,在那里,转换也不打算用于 public 使用(如:在这个包之外)。
有人知道更好的方法吗?我在搜索时没有找到 tensorflow::Tensor
到 PyObject
的现有实现吗?
py_func 操作的实现有 code to convert Tensor to PyObject。
更准确地说,应该执行以下操作:
#include "tensorflow/python/lib/core/py_func.h"
Status TensorHandler::ExportTensorAsNumpy(const Tensor *inputTensor) {
PyObject* numpyObject = Py_None;
tensorflow::ConvertTensorToNdarray(*inputTensor, &numpyObject);
//process the numpy further its now stored in numpyObject
//call this when you don't use the numpyObject anymore
Py_DECREF(numpyObject);
}
当你不使用 numpy 对象时不要忘记调用 Py_DECREF 否则你的程序会导致内存泄漏。也不要忘记在你的 bazel 构建中包含 py_func 作为依赖项。