Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 27. květen 2021, 11:32:06 Předmět: C++ a neuronové sítě |
|
|
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 |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 27. květen 2021, 14:33:37 Předmět: |
|
|
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 |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 27. květen 2021, 15:03:36 Předmět: |
|
|
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 |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 27. květen 2021, 19:20:57 Předmět: |
|
|
Tak přepsat ty includy a přidat ten OpenNN jako zdrojáky přímo do projektu, ne jako knihovnu
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 |
|
|
OndraSej
Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 27. květen 2021, 21:36:38 Předmět: |
|
|
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 |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 28. květen 2021, 07:31:57 Předmět: |
|
|
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 |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 28. květen 2021, 07:41:41 Předmět: |
|
|
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 |
|
|
OndraSej
Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 28. květen 2021, 09:29:59 Předmět: |
|
|
]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 |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 28. květen 2021, 10:19:10 Předmět: |
|
|
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 |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 28. květen 2021, 10:30:02 Předmět: |
|
|
]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
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 Toch má prebuild knihovny a dál jsem to neřešil _________________ Perry.cz
Naposledy upravil perry dne 28. květen 2021, 10:32:28, celkově upraveno 1 krát |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 28. květen 2021, 10:31:53 Předmět: |
|
|
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 |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 28. květen 2021, 10:40:21 Předmět: |
|
|
Zajímavé, to jsem neznal To vypadá na nějakou původní verzi, co běžela přes jazyk Lua místo Pythonu _________________ Perry.cz |
|
Návrat nahoru |
|
|
OndraSej
Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 28. květen 2021, 12:19:51 Předmět: |
|
|
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 Toch má prebuild knihovny a dál jsem to neřešil [/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 |
|
|
|