繁体   English   中英

Ada + 机器学习(Python 框架)

[英]Ada + Machine Learning (Python Framework)

我正在尝试用 Ada 编写一个简单的机器学习应用程序,还试图找到一个好的框架来使用。 我对一件事的了解极少,对另一件事的了解也很少。

那里有几个漂亮的机器学习框架,我想利用一个与 Ada 程序一起使用,但我想我只是……不知所措。 例如,我可以使用一个用 Python 编写的现有框架并包装(或者我猜是绑定?)Ada 中的 API 调用吗? 我应该放弃脚本功能吗? 我想弄明白。

例证:Scikit(sklearn) https://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html#

这做了一些巧妙的事情,我希望能够利用它,但使用 Ada 程序。 有没有人有类似经验的建议?

我只是在研究,所以我尝试查找信息。

http://www.inspirel.com/articles/Ada_Python_Binding.html https://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html#

inspirel解决方案基于python2.7。 如果您使用的是 python3.5 以上版本,则需要制作一些模组

python_模块.py

#print 'Hello from Python module'
print('Hello from Python module')

#print 'Python adding:', a, '+', b
print('Python adding:', a, '+', b)

ada_main.adb

-- Python.Execute_String("print 'Hello from Python!'");
Python.Execute_String("print('Hello from Python!')");

一些例程已被弃用,因此必须更改链接

python.adb

--pragma Import(C, PyInt_AsLong, "PyInt_AsLong");
pragma Import(C, PyInt_AsLong, "PyLong_AsLong");

--pragma Import(C, PyString_FromString, PyString_FromString");
pragma Import(C, PyString_FromString, "PyUnicode_FromString");

现在有趣的是。 在 Linux 上,更改为 python 3.9,您只需更改

--for Default_Switches ("Ada") use ("-lpython2.7");
for Default_Switches ("Ada") use ("-lpython3.7");

但在 windows 上,这些库不会转储到社区库中。 所有包裹都分开存放。 必须添加 -L 以告诉 linker 在哪里可以找到库。 就我而言,我进行了 python 的非管理员安装,所以它看起来像

for Default_Switches ("Ada") use ("-L\Users\StdUser\AppData\Local\Programs\Python\Python37-32\libs", "-lpython37");

使用 gprbuild 而不是 gnatmake -p,后者已被弃用。 如果你正确地做所有的模组

gprbuild ada_main.gpr

应该在 obj\ada_main.exe 中给你一个可执行文件。 运行可执行文件应该给

C:\Users\StdUser\My Documents\ada-python>gprbuild ada_main.gpr
Compile
   [Ada]          ada_main.adb
Bind
   [gprbind]      ada_main.bexch
   [Ada]          ada_main.ali
Link
   [link]         ada_main.adb

C:\Users\StdUser\My Documents\ada-python>obj\ada_main.exe
executing Python directly from Ada:
Hello from Python!

loading external Python module and calling functions from that module:
Hello from Python module!

asking Python to add two integers:
Python adding: 10 + 2
Ada got result from Python: 12

we can try other operations, too:
subtract: 8
multiply: 20
divide  : 5

请记住将 pythonxx.dll 放在路径的某个位置,否则它将无法在开始执行时找到库。

可以使用Python编写的现有机器学习框架,例如scikit-learn,带有Ada程序。 一种方法是使用 Ada 的外部 function 接口 (FFI) 绑定到 Python API 调用,这样您就可以从 Ada 程序中调用 Python 函数。 这可以使用 GPRBind 或 SWIG 等库来完成,它们可以生成必要的绑定。

另一种选择是使用 Python 脚本执行机器学习任务,并使用命令行或文件将数据传入和传出 Ada 程序。 这样您就可以利用 Python 框架的功能,而不必将其直接集成到您的 Ada 程序中。

值得注意的是,由于 Ada 是一种系统编程语言,它往往更常用于嵌入式系统、实时系统和安全关键系统。 它对 ML 来说不太受欢迎。 因此,为 ML 任务找到 Ada 库或特定于 Ada 的教程可能更具挑战性。

建议您尝试与 Python 集成的不同方式,看看哪种方式最适合您的特定用例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM