tensorflow :: Tensor to python Tensor或numpy.nd_array

时间:2017-03-27 14:04:59

标签: python c++ c tensorflow python-c-api

我有一个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::TensorTF_Tensor在C-Api中定义为Tensorflow,在那里,转换也不适合公共使用(如:在此包之外)。

有人知道更好的方法吗?我在搜索时找不到tensorflow::TensorPyObject的现有实现吗?

2 个答案:

答案 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作为依赖项。