Co je TensorFlow? Vysvětlení knihovny pro strojové učení

TensorFlow je open source knihovna pro numerické výpočty v jazyce Python, která urychluje a usnadňuje strojové učení a vývoj neuronových sítí.
Strojové učení je složitá disciplína, ale implementace modelů strojového učení je mnohem méně náročná než dříve, a to díky rámcům strojového učení – jako je TensorFlow od společnosti Google – které usnadňují proces získávání dat, trénování modelů, podávání předpovědí a zpřesňování budoucích výsledků.

TensorFlow, vytvořený týmem Google Brain a původně uvolněný pro veřejnost v roce 2015, je open source knihovna pro numerické výpočty a rozsáhlé strojové učení. TensorFlow sdružuje řadu modelů a algoritmů strojového učení a hlubokého učení (tzv. neuronových sítí) a umožňuje jejich využití prostřednictvím běžných programových metafor. Používá jazyk Python nebo JavaScript a poskytuje pohodlné rozhraní API pro vytváření aplikací na front-endu, přičemž tyto aplikace se provádějí ve vysoce výkonném jazyce C++.

TensorFlow, který konkuruje frameworkům jako PyTorch a Apache MXNet, dokáže trénovat a provozovat hluboké neuronové sítě pro klasifikaci ručně psaných číslic, rozpoznávání obrazu, vkládání slov, rekurentní neuronové sítě, modely sekvence na sekvenci pro strojový překlad, zpracování přirozeného jazyka a simulace založené na PDE (parciální diferenciální rovnice). Nejlepší ze všeho je, že TensorFlow podporuje produkční predikci ve velkém měřítku se stejnými modely používanými pro trénování.

TensorFlow má také širokou knihovnu předtrénovaných modelů, které lze použít ve vlastních projektech. Můžete také použít kód z TensorFlow Model Garden jako příklady osvědčených postupů pro trénování vlastních modelů.

TensorFlow umožňuje vývojářům vytvářet grafy datových toků – struktury, které popisují, jak se data pohybují grafem nebo řadou uzlů zpracování. Každý uzel v grafu představuje matematickou operaci a každé spojení nebo hrana mezi uzly je vícerozměrné datové pole neboli tenzor.

Aplikace TensorFlow lze spustit na většině vhodných cílů: na místním počítači, clusteru v cloudu, zařízeních se systémy iOS a Android, procesorech CPU nebo GPU. Pokud používáte vlastní cloud společnosti Google, můžete TensorFlow spustit na vlastním křemíku TensorFlow Processing Unit (TPU) společnosti Google a dále jej urychlit. Výsledné modely vytvořené nástrojem TensorFlow však lze nasadit na většině jakýchkoli zařízení, kde budou sloužit k předpovědím.

Framework TensorFlow 2.0, vydaný v říjnu 2019, byl na základě zpětné vazby od uživatelů v mnoha ohledech přepracován, aby se s ním lépe pracovalo (jako příklad lze uvést použití relativně jednoduchého rozhraní Keras API pro trénování modelů) a byl výkonnější. Distribuované trénování je díky novému rozhraní API jednodušší a podpora TensorFlow Lite umožňuje nasazení modelů na větší množství platforem. Kód napsaný pro dřívější verze TensorFlow je však nutné přepsat – někdy jen mírně, jindy výrazně – aby bylo možné maximálně využít nové funkce TensorFlow 2.0.

Natrénovaný model lze použít k poskytování předpovědí jako služby prostřednictvím kontejneru Docker s využitím rozhraní REST nebo gRPC API. Pro pokročilejší scénáře doručování můžete použít Kubernetes.

Použití TensorFlow s jazykem Python

TensorFlow toto vše poskytuje programátorům prostřednictvím jazyka Python. Jazyk Python se snadno učí a pracuje s ním a poskytuje pohodlné způsoby, jak vyjádřit, jak lze spojit abstrakce na vysoké úrovni. TensorFlow je podporován v jazyce Python ve verzích 3.7 až 3.10, a i když může fungovat i v dřívějších verzích Pythonu, není to zaručeno.

Uzly a tenzory v TensorFlow jsou objekty Pythonu a aplikace TensorFlow jsou samy o sobě aplikacemi Pythonu. Vlastní matematické operace se však neprovádějí v jazyce Python. Knihovny transformací, které jsou k dispozici prostřednictvím TensorFlow, jsou napsány jako vysoce výkonné binární soubory C++. Python pouze řídí provoz mezi jednotlivými částmi a poskytuje vysokoúrovňové programové abstrakce pro jejich propojení.

Práce na vysoké úrovni v TensorFlow – vytváření uzlů a vrstev a jejich propojování – využívá knihovnu Keras. Rozhraní Keras API je navenek jednoduché; základní model se třemi vrstvami lze definovat na méně než 10 řádcích kódu a kód pro jeho trénování zabere jen několik dalších řádků kódu. Pokud však chcete do problematiky neuronových sítí ponořit hlouběji a provést jemnější práci, například napsat vlastní trénovací smyčku, můžete to udělat.

Používání TensorFlow v jazyce JavaScript

Nejoblíbenějším jazykem pro práci s TensorFlow a strojovým učením obecně je Python. JavaScript je však nyní také prvotřídním jazykem pro TensorFlow a jednou z obrovských výhod JavaScriptu je, že běží všude, kde je k dispozici webový prohlížeč.

TensorFlow.js, jak se knihovna TensorFlow v JavaScriptu jmenuje, využívá rozhraní WebGL API k urychlení výpočtů prostřednictvím libovolného grafického procesoru, který je v systému k dispozici. Pro provádění je možné použít také back end WebAssembly, který je rychlejší než běžný back end JavaScriptu, pokud běží pouze na CPU, i když je nejlepší používat GPU, kdykoli je to možné. Předpřipravené modely vám umožní začít pracovat s jednoduchými projekty, abyste získali představu o tom, jak věci fungují.

TensorFlow Lite

Vytrénované modely TensorFlow lze nasadit také na okrajových počítačích nebo mobilních zařízeních, jako jsou systémy iOS nebo Android. Sada nástrojů TensorFlow Lite optimalizuje modely TensorFlow tak, aby dobře běžely na takových zařízeních, a umožňuje vám dělat kompromisy mezi velikostí modelu a jeho přesností. Menší model (tj. 12 MB oproti 25 MB nebo dokonce 100+ MB) je méně přesný, ale ztráta přesnosti je obecně malá a je více než kompenzována rychlostí a energetickou účinností modelu.

Proč používat TensorFlow

Největší výhodou, kterou TensorFlow poskytuje pro vývoj strojového učení, je abstrakce. Místo toho, aby se vývojář zabýval hloubkovými detaily implementace algoritmů nebo vymýšlel správné způsoby, jak připojit výstup jedné funkce ke vstupu jiné, může se soustředit na celkovou logiku aplikace.

TensorFlow se postará o detaily v zákulisí.

TensorFlow nabízí další vymoženosti pro vývojáře, kteří potřebují ladit a získávat introspekci do aplikací TensorFlow. Každou operaci grafu lze vyhodnocovat a upravovat samostatně a transparentně, místo aby se celý graf konstruoval jako jeden neprůhledný objekt a vyhodnocoval se najednou. Tento takzvaný „eager execution mode“, poskytovaný jako volitelná možnost ve starších verzích TensorFlow, je nyní standardem.

Vizualizační sada TensorBoard umožňuje kontrolovat a profilovat způsob běhu grafů prostřednictvím interaktivního webového panelu. Služba Tensorboard.dev (hostovaná společností Google) umožňuje hostovat a sdílet experimenty strojového učení napsané v TensorFlow. Je k dispozici zdarma s úložištěm až pro 100 milionů skalárů, 1 GB dat tenzorů a 1 GB dat binárních objektů. (Všimněte si, že všechna data hostovaná na Tensorboard.dev jsou veřejná, takže je nepoužívejte pro citlivé projekty.)

TensorFlow také získává mnoho výhod díky podpoře áčkové komerční společnosti Google. Společnost Google podpořila rychlé tempo vývoje tohoto projektu a vytvořila mnoho významných nabídek, které usnadňují nasazení a používání TensorFlow. Výše zmíněný výpočet s využítím TPU pro zrychlení výkonu v cloudu společnosti Google je jen jedním z příkladů.

Deterministické trénování modelů pomocí TensorFlow

Několik detailů implementace TensorFlow ztěžuje získání zcela deterministických výsledků trénování modelů u některých tréninkových úloh. Někdy se model natrénovaný na jednom systému bude mírně lišit od modelu natrénovaného na jiném systému, i když jim budou dodána naprosto stejná data. Důvody této odchylky jsou klouzavé – jedním z nich je způsob a místo nasazování náhodných čísel, další souvisí s určitým nedeterministickým chováním při použití GPU. Ve větvi TensorFlow 2.0 je možnost zapnout determinismus v celém pracovním postupu pomocí několika řádků kódu. Tato funkce je však spojena s náklady na výkon a měla by se používat pouze při ladění pracovního postupu.

TensorFlow vs. PyTorch, CNTK a MXNet

TensorFlow soupeří s řadou dalších frameworků pro strojové učení. PyTorch, CNTK a MXNet jsou tři hlavní rámce, které řeší mnoho stejných potřeb. Pojďme se na závěr krátce podívat na to, v čem vynikají a v čem jsou proti TensorFlow slabší:

PyTorch je vytvořen v jazyce Python a má mnoho dalších podobností s TensorFlow: hardwarově akcelerované komponenty pod kapotou, vysoce interaktivní vývojový model, který umožňuje práci s návrhem za chodu, a mnoho již obsažených užitečných komponent. PyTorch je obecně lepší volbou pro rychlý vývoj projektů, které je třeba zprovoznit v krátkém čase, ale TensorFlow vítězí u větších projektů a složitějších pracovních postupů.
CNTK, Microsoft Cognitive Toolkit, podobně jako TensorFlow využívá grafovou strukturu pro popis toku dat, ale zaměřuje se především na vytváření neuronových sítí pro hluboké učení. CNTK zvládá mnoho úloh neuronových sítí rychleji a má širší sadu rozhraní API (Python, C++, C#, Java). V současné době však není tak snadné se jej naučit nebo nasadit jako TensorFlow. Je také k dispozici pouze pod licencí GNU GPL 3.0, zatímco TensorFlow je k dispozici pod liberálnější licencí Apache. A CNTK není tak agresivně vyvíjen; poslední větší verze vyšla v roce 2019.
Apache MXNet, přijatý společností Amazon jako hlavní framework pro hluboké učení na AWS, lze téměř lineárně škálovat na více GPU a více strojích. MXNet také podporuje širokou škálu jazykových rozhraní API – Python, C++, Scala, R, JavaScript, Julia, Perl, Go – i když jeho nativní rozhraní API nejsou tak příjemná na práci jako rozhraní TensorFlow. Má také mnohem menší komunitu uživatelů a vývojářů.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.