我有一个C ++ tensorflow::Tensor
我试图在Python中访问它的内容。
我查看了Tensorflow C++ Documentation,搜索了一个可以将tensorflow::Tensor
转换为任何合理PyObject
的函数(现在无关紧要,这是tf.Tensor
}或numpy.nd_array
)。
通过Tensorflow Code查看后,我发现了以下线索:
TF_Tensor_to_PyObject(TF_Tensor* Tensor, PyObject** out_array)
中定义了tensorflow/python/client/tf_session_helper.cc
方法。但是,这是在隐藏的Bazel包中定义的,而且是在匿名C ++命名空间中定义的。修改Tensorflow本身似乎不直观(我必须修改Bazel BUILD文件,.h和.cc文件),并编译我自己的Tensorflow以使用此方法。
此方法的另一个问题是TF_Tensor
!= tensorflow::Tensor
。 TF_Tensor
在C-Api中定义为Tensorflow,在那里,转换也不适合公共使用(如:在此包之外)。
有人知道更好的方法吗?我在搜索时找不到tensorflow::Tensor
到PyObject
的现有实现吗?
答案 0 :(得分:1)
py_func op的实现有code to convert Tensor to PyObject。
答案 1 :(得分:0)
更确切地说,应执行以下操作:
#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作为依赖项。