стек, вызывающий функцию Python, импортирующую тензорный поток Переполнение стека

Я новичок в tenorflow, а также включаю код на Python в C ++, поэтому я бы оценил любые советы / комментарии по поводу следующего странного поведения:
У меня есть Python-интерфейс класса C ++ с заголовочным файлом pythoninterface.h:

#include <string>
#include <iostream>

class pythoninterface{
private:
const char* file;
const char* funct;
const char* filepath;

public:
pythoninterface();

~pythoninterface();

void CallFunction();
};

Исходный файл pythoninterface.cpp:

#include <Python.h>
#include <string>
#include <sstream>
#include <vector>
#include "pythoninterface.h"
pythoninterface::pythoninterface(){

file = "TensorflowIncludePy";
funct = "myTestFunction";
filepath = "/path/To/TensorflowIncludePy.py";
}

void pythoninterface::CallFunction(){

PyObject *pName, *pModule, *pDict, *pFunc, *pValue, *presult;

// Initialize the Python Interpreter
Py_Initialize();

//Set in path where to find the custom python module other than the path where Python's system modules/packages are found.
std::stringstream changepath;
changepath << "import sys; sys.path.insert(0, '" << filepath << "')";
const std::string tmp = changepath.str();
filepath = tmp.c_str();
PyRun_SimpleString (this->filepath);// Build the name object
pName = PyString_FromString(this->file);

// Load the module object
pModule = PyImport_Import(pName);

if(pModule != NULL) {
// pDict is a borrowed reference
pDict = PyModule_GetDict(pModule);// pFunc is also a borrowed reference
pFunc = PyDict_GetItemString(pDict, this->funct);

if (PyCallable_Check(pFunc))
{
pValue=Py_BuildValue("()");
printf("pValue is empty!\n");
PyErr_Print();
presult=PyObject_CallObject(pFunc,pValue);
PyErr_Print();
} else
{
PyErr_Print();
}
printf("Result is %d!\n",PyInt_AsLong(presult));
Py_DECREF(pValue);

// Clean up
Py_DECREF(pModule);
Py_DECREF(pName);
}
else{
std::cout << "Python retuned null pointer, no file!" << std::endl;
}

// Finish the Python Interpreter
Py_Finalize();
}

И файл Python, из которого должна быть включена функция (TensorflowIncludePy.py):

def myTestFunction():
print 'I am a function without an input!'
gettingStartedTF()
return 42def gettingStartedTF():
import tensorflow as tf #At this point the error occurs!
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
return 42

Наконец, в моей основной функции я создаю только pythoninterface объект p и вызвать функцию p.CallFunction(), Связь между C ++ и Python-кодом работает нормально, но когда (во время выполнения) строка import tensorflow as tf достигнуто, я получаю *** stack smashing detected *** сообщение об ошибке и программа заканчивается. Кто-нибудь может угадать, в чем проблема или была похожая проблема раньше?

Я знаю, что есть API-интерфейс tenorflow c ++, но я чувствую себя более комфортно с использованием tenorflow в python, поэтому я подумал, что это может быть идеальным решением для меня (по-видимому, это не так …: P)

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]