簡體   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