.[ ČeskéHry.cz ].
C++ a neuronové sítě
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> AI
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 27. květen 2021, 11:32:06    Předmět: C++ a neuronové sítě Odpovědět s citátem

Trochu jsem se zasekl s výběrem frameworku pro neuronový sítě. Chtěl bych něco, co funguje nativně v C++, ideálně umí GPU akceleraci, ale přitom to neni moloch. A zároveň bych preferoval aktivní projekt, ne něco, co se už nevyvíjí.

Líbilo se mi OpenNN - vše je krásně popsáno (to velmi oceňuju), je to jednoduchý a vše to splňuje. Jenže když sem to nainstaloval, tak mě zklamalo, jak je ta knihovna napsaná. Všechny 3rdčka jsou includovaný napřímo, takže includem opennn si zatáhnete do projektu všechno možný. Nehledě na to, že takto to ani nemůžu použít v našem firemním build systému.
Pak jsem tam viděl nějaký špatně ošetřený enumy a hlavně, nikde ani jeden move konstruktor. Takže si načtete nějaký hafo velký dataset a ještě ho pro jistotu asi 3x zkopírujete. Ne, že by to tak moc vadilo, ale nevzbuzuje to ve mě důvěru v autory.

Znáte něco lepšího?
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 27. květen 2021, 14:33:37    Předmět: Odpovědět s citátem

Zběžně jsem koukal na ten OpenNN - kromě Eigenu jsem tam nic 3rd party neviděl, co jsi myslel tím že se tam zatáhne všechno možný?

Pokud myslíš ten Eigen, tak ten jinak nefunguje myslím, ten je celý v headerech a přes templates.

--

Jinak já v C++ používám (resp. hrál jsem si) s Torchem (https://pytorch.org/). Bohužel to ale není rozhodně light-weight.
Includuje se toho hrozně, release build v plné optimalizaci běží strašně dlouho (když se udělá build s optimalizací jen přes moduly, tak to jde).

Je to nativní v C++ (má to i verzi pro CUDU), ale primární použití je binding na Python, takže samply a hodně věcí je pouze pro Python. Na druhou stranu, základní logika je víceméně stejná a dost se snažili mít i ty kódy podobné z hlediska inicializací a pointerů, které hodně schovávají. Dokumentace, resp. takový to na rozjetí, mi přišlo fajn, to mají popsané i v C++ a někde jsem viděl tutoriál podle kterého jsem to zprovoznil.

Lze v tom udělat libovolnou síť, tzn. ne jen klasické feed-forward, ale i konvoluční nad obrázky atd.
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 27. květen 2021, 15:03:36    Předmět: Odpovědět s citátem

No, asi máš pravdu, jsou to jen header-only záležitosti, třeba by to šlo překousnout. Ale zrovna eigen už v repozitory máme a tahle knihovna si ho vynucuje svůj (kvůli cestám). To by znamenalo, že by to vlastně nešlo použít dohromady (různé verze a tak).
Vybírat knihovny je peklo. Zlatý starý časy, kdy se prostě jen programovalo.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 27. květen 2021, 19:20:57    Předmět: Odpovědět s citátem

Tak přepsat ty includy a přidat ten OpenNN jako zdrojáky přímo do projektu, ne jako knihovnu Smile
Takhle to občas taky dělám, když se mi někde pomlacují závislosti.

Jo, vybírat knihovny je děs. Hlavně když dělám něco, co má běhat na PC, Linuxu a ještě k tomu ideálně na mobilech :/
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 27. květen 2021, 21:36:38    Předmět: Odpovědět s citátem

A potřebuješ v C++ úplně vše?

My jsme to řešili s kolegou, který opravdu hodně nemá rád Python, ale až na osobní antipatie se ukázalo, že v C++ potřebujeme jen inferenci. Tvorbu + trénování modelu můžeme mít v čemkoliv jiném, protože ty můžeme spouštět samostatně.

Takže trénink/tvorbu modelu máme v Pythonu a TensorFlow (z různých důvodů, které zdaleka nemusí být relevantní pro všechny) a pro inferenci a integraci do dalších projektů si exportujeme natrénovaný model do TensorFlow Lite. To je mnohem menší knihovna s celkem rozumným C API, takže není problém ji integrovat a použít skoro kdekoliv.
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 28. květen 2021, 07:31:57    Předmět: Odpovědět s citátem

U mě je to taky tak, že nemám rád Python. Mám osypky z toho, jak věci kolem pythonu nefungují. Jedna věc potřebuje python 2.7, druhá zas 3.něco. Nakonec po několika hodinách instalací různých balíčků do anakondy spustím skript a vyjede další error a můžu zas vesele googlit. Jinak mi byl python i sympatický, ale nejsem v tom prostě doma a nerad se učím nové věci.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 28. květen 2021, 07:41:41    Předmět: Odpovědět s citátem

Python mě strašně štve. Na Linuxu je to ještě většinou OK, ale na woknech mi často skončí instalace chybou, že se nepodařilo přeložit nějaké C++ jádro knihovny, protože další knihovna XY nebyla nalezena.

citace:
My jsme to řešili s kolegou, který opravdu hodně nemá rád Python, ale až na osobní antipatie se ukázalo, že v C++ potřebujeme jen inferenci. Tvorbu + trénování modelu můžeme mít v čemkoliv jiném, protože ty můžeme spouštět samostatně.


To se mi líbí právě na tom Torchi. Kolega dělá Python, já C++, ale tím že to má podobné API tak si můžeme navzájem radit. Do určité míry tam lze natrénovat model v Pythonu a pak ho v C++ spustit nebo naopak. Popř. si to natrénuji celé znova v C++ s tm že model se přepíše celkem snadno vzhledem k syntaxi.
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 28. květen 2021, 09:29:59    Předmět: Odpovědět s citátem

]semo[> Python 2 je oficiálně mrtvý od začátku loňského roku. Pokud bez něj dnes nějaký projekt neběží (a horečně se nepracuje na portu), tak bych se mu spíš vyhnul.

perry> My jsme v rámci duševní hygieny a šetření času rozhodně nechtěli nic duplikovat. A protože k té hormadě knihoven v Pythonu v jiných jazycích bohužel není evkivalent a pravděpodobně nikdy nebude, skončili jsme u Pythonu (a kolega se postupně přesunul k jiným věcem, kde Python není potřeba).

Jinak na TensorFlow Lite se mi líbí, že celý model (tj. počty, velikosti a typy vrstev, ...) jsou popsané v tom souboru s natrénovaným modelem. Kód v C++ jen připraví vstupy do správného formátu, spustí výpočet a pak si v domluveném formátu zase přečte výstupy. A pokud neměníme formát vstupu nebo výstupu, tak v Pythonu můžeme dělat co chceme a v C++ stačí jen nahrát nový export modelu a funguje to.
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 28. květen 2021, 10:19:10    Předmět: Odpovědět s citátem

Ten Torch mi připadá, že ho dlouho nikdo neupdatoval. Neni to mrtvý projekt?

A zkoušeli ste někdo mlpack nebo DyNet?

...mlpack sem zkusit chtěl, ale už druhý den opět bojuju se zprovozněním buildu. Tyhle rozlezlý knihovny nejsou nic pro mě :-(.

TensorFlow lite - to je pro nějaký arduina, ne?
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 28. květen 2021, 10:30:02    Předmět: Odpovědět s citátem

]semo[ napsal:
Ten Torch mi připadá, že ho dlouho nikdo neupdatoval. Neni to mrtvý projekt?


Podle GITu je poslední update před 5hodinami, to mi nepřijde tak dávno Very Happy

citace:
A protože k té hormadě knihoven v Pythonu v jiných jazycích bohužel není evkivalent a pravděpodobně nikdy nebude


Část těch knihoven je jenom wrapper nad nějakou C++ knihovnou. Např. teď takhle používám pyClustering (neumí teda všechno co ta python verze, ale stačí mi to). Zatím jsem nenašel nic, co by v C++ nemělo ekvivalent - OpenCV je na obojím, Eigen je slušná náhrada za různé matemetické knihovny, Torch je na obojím atp.

--

On Tensorflow je taky napsaný v C++, ale přišlo mi to jejich API, abych to použil z C++ dost divné a vlastně ani ne moc komentované. A zprovozňovat to nějak ručně jsem nenašel odvahu Very Happy Toch má prebuild knihovny a dál jsem to neřešil Smile
_________________
Perry.cz


Naposledy upravil perry dne 28. květen 2021, 10:32:28, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 28. květen 2021, 10:31:53    Předmět: Odpovědět s citátem

hoď link, asi se dívám na jiný Torch..
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 28. květen 2021, 10:34:02    Předmět: Odpovědět s citátem

https://pytorch.org/ tady jsou prebuild knihovny
https://github.com/pytorch a jejich GIT
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 28. květen 2021, 10:36:22    Předmět: Odpovědět s citátem

aha, zmátlo mě to Py...myslel sem že máš nějakou verzi bez py..., třeba tohle: https://github.com/torch/nn
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 28. květen 2021, 10:40:21    Předmět: Odpovědět s citátem

Zajímavé, to jsem neznal Smile To vypadá na nějakou původní verzi, co běžela přes jazyk Lua místo Pythonu Smile
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 28. květen 2021, 12:19:51    Předmět: Odpovědět s citátem

perry napsal:
Část těch knihoven je jenom wrapper nad nějakou C++ knihovnou. Např. teď takhle používám pyClustering (neumí teda všechno co ta python verze, ale stačí mi to). Zatím jsem nenašel nic, co by v C++ nemělo ekvivalent - OpenCV je na obojím, Eigen je slušná náhrada za různé matemetické knihovny, Torch je na obojím atp.


Já jsem myslel knihovny pro strojové učení nad TensorFlow (nebo nad Torchem). Spousta algoritmů a architektur sítí je napsaných v Pythonu nad TensorFlow.

On Tensorflow je taky napsaný v C++, ale přišlo mi to jejich API, abych to použil z C++ dost divné a vlastně ani ne moc komentované. A zprovozňovat to nějak ručně jsem nenašel odvahu Very Happy Toch má prebuild knihovny a dál jsem to neřešil Smile[/quote]

No, jádro TensorFlow a jednotlivé low-level operace jsou sice napsané v C++, ale pak k tomu je v Pythonu řídící kód, který k tomu dodá rozumné parametry, vybere správnou variantu té low-level operace a tak dál. A tohle všechno (a další knihovny pro skládání operací dohromady) v C++ moc ekvivalent nemá.

]semo[ napsal:
TensorFlow lite - to je pro nějaký arduina, ne?


Hlavní cíl jsou mobilní zařízení s Androidem a iOS (a tedy ARM). Já to používám na x86 s Linuxem a to funguje taky dobře - a předpokládám, že na Windows to bude podobně.
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> AI Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna