gpt4 book ai didi

c - 在C中嵌入python中导入keras时出错

转载 作者:行者123 更新时间:2023-11-30 16:34:58 30 4
gpt4 key购买 nike

我正在尝试将 python 嵌入到我的 C 应用程序中。我在python官网下载了这个包,并成功做了一个简单的Hello World。

现在我想更深入地使用一些 python 库,如 numpy、keras、tensorflow...

我正在使用 Python 3.5.4,我使用 pip3 在我的电脑上安装了所有需要的包:

pip3 install keras
pip3 install tensorflow
...

然后我创建了脚本并在 python 环境中启动它,它工作正常:

Python:

# Importing the libraries
#
import numpy as np
import pandas as pd

dataset2 = pd.read_csv('I:\RNA\dataset19.csv')
X_test = dataset2.iloc[:, 0:228].values
y_test = dataset2.iloc[:, 228].values

# 2.
import pickle
sc = pickle.load(open('I:\RNA\isVerb_sc', 'rb'))
X_test = sc.transform(X_test)

# 3.
import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout

classifier = Sequential()

classifier.add(Dense(units = 114, kernel_initializer = 'uniform', activation = 'relu', input_dim = 228))
classifier.add(Dropout(p = 0.3))

classifier.add(Dense(units = 114, kernel_initializer = 'uniform', activation = 'relu'))
classifier.add(Dropout(p = 0.3))

classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))

classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

classifier.load_weights('I:\RNA\isVerb_weights.h5')

y_pred = classifier.predict(X_test)
y_pred1 = (y_pred > 0.5)

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred1)

但是当我在 C 环境中使用嵌入 python 执行相同的脚本时,它不起作用:

首先,我直接使用 PyRun_SimpleFile 执行脚本,但没有成功,因此我使用 PyRun_SimpleString 将其分割为多个指令来检测问题:

C:

result = PyRun_SimpleString("import numpy as np"); // result = 0 (ok)
result = PyRun_SimpleString("import pandas as pd"); // result = 0 (ok)
...
result = PyRun_SimpleString("import pickle"); // result = 0 (ok)
... (all insctruction above works)
result = PyRun_SimpleString("import keras"); // result = -1 !!
... (all under this failed)

但是没有关于此错误的单个堆栈跟踪,我尝试了 this但我刚刚得到:

“这是输出:(空)”

我在 C 中对 Python 的初始化似乎是正确的,因为其他库导入得很好:

    // Python
wchar_t *stdProgramName = L"I:\\LIBs\\cpython354";
Py_SetProgramName(stdProgramName);

wchar_t *stdPythonHome = L"I:\\LIBs\\cpython354";
Py_SetPythonHome(stdPythonHome);

wchar_t *stdlib = L"I:\\LIBs\\cpython354;I:\\LIBs\\cpython354\\Lib\\python35.zip;I:\\LIBs\\cpython354\\Lib;I:\\LIBs\\cpython354\\DLLs;I:\\LIBs\\cpython354\\Lib\\site-packages";
Py_SetPath(stdlib);

// Initialize Python
Py_Initialize();

当在Python cmd中时,行import keras需要一些时间(3秒)但有效(警告,但我发现它没有什么坏处):

>>> import keras
I:\LIBs\cpython354\lib\site-packages\h5py\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
from ._conv import register_converters as _register_converters
Using TensorFlow backend.
>>>

我现在很茫然,我不知道该看哪里,因为没有堆栈跟踪。

最佳答案

看起来当你导入keras时,它会执行这一行:

sys.stderr.write('Using TensorFlow backend.\n')

或者 sys.stderr 没有在 Windows 上嵌入的 python 中定义

一个简单的更正是定义 sys.stderr,例如:

import sys
class CatchOutErr:
def __init__(self):
self.value = ''
def write(self, txt):
self.value += txt

catchOutErr = CatchOutErr()
sys.stderr = catchOutErr

关于c - 在C中嵌入python中导入keras时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49110432/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com