TensorFlow

Začínáme s TensorFlow

Začínáme s TensorFlow
TensorFlow je mozek dítěte Google a jeho jádrem je knihovna pro numerické výpočty. Je napsán v C / C ++ a má velmi flexibilní API. Toto API lze propojit s front-endem Pythonu, takže můžete psát malé úryvky kódu Pythonu pro řešení komplikovaných problémů. Flexibilní a konzistentní API také umožňuje vývojářům používat stejný front-endový kód pro spuštění na různých platformách, jako jsou GPU Nvidia, univerzální CPU a dokonce i mobilní a vestavěná zařízení, z nichž každé má v back-endu velmi odlišnou implementaci.

TensorFlow našel nesmírné využití v oblasti strojového učení právě proto, že strojové učení zahrnuje velké množství čísel a používá se jako zobecněná technika řešení problémů. A i když s ním budeme interagovat pomocí Pythonu, má front-end pro jiné jazyky, jako je Go, Node.js a dokonce C #.

Tensorflow je jako černá skříňka, která v sobě skrývá všechny matematické jemnosti a vývojář pouze volá správné funkce k vyřešení problému. Ale jaký problém?

Strojové učení (ML)

Předpokládejme, že navrhujete robota na hraní šachové hry. Vzhledem ke způsobu, jakým jsou šachy navrženy, jak se pohybují figurky a přesně definovanému cíli hry, je docela možné napsat program, který by hru hrál extrémně dobře. Ve skutečnosti by to v šachu přelstilo celou lidskou rasu. Díky stavu všech figurek na desce by přesně vědělo, jaký pohyb potřebuje.

Takový program však může hrát pouze šachy. Pravidla hry jsou zapletena do logiky kódu a vše, co program dělá, je provádět tuto logiku důsledně a přesněji, než by kdokoli mohl. Nejedná se o obecný algoritmus, který můžete použít k návrhu jakéhokoli herního robota.

Díky strojovému učení se paradigma posune a algoritmy se stávají stále více obecnými.

Myšlenka je jednoduchá, začíná definováním klasifikačního problému. Například chcete automatizovat proces identifikace druhů pavouků. Druhy, které znáte, jsou různé třídy (nezaměňovat s taxonomickými třídami) a cílem algoritmu je seřadit nový neznámý obrázek do jedné z těchto tříd.

Zde by prvním krokem pro člověka bylo určit vlastnosti různých jednotlivých pavouků. Dodali bychom údaje o délce, šířce, tělesné hmotnosti a barvě jednotlivých pavouků spolu s druhy, ke kterým patří:

Délka Šířka Hmotnost Barva Textura Druh
5 3 12 Hnědý hladký Tati, dlouhé nohy
10 8 28 Hnědo-černá chlupatý Tarantule

Velká sada takovýchto dat jednotlivých pavouků bude použita k „trénování“ algoritmu a další podobný datový soubor bude použit k testování algoritmu, aby se zjistilo, jak dobře funguje proti novým informacím, s nimiž se nikdy předtím nesetkal, ale které již známe odpovědět.

Algoritmus začne náhodně. To znamená, že každý pavouk bez ohledu na jeho vlastnosti by byl klasifikován jako kdokoli z tohoto druhu. Pokud v naší datové sadě existuje 10 různých druhů, pak by tento naivní algoritmus dostal správnou klasifikaci přibližně 1/10 času kvůli čistému štěstí.

Ale pak by začal převzít aspekt strojového učení. Začalo by to spojovat určité funkce s určitým výsledkem. Například chlupatí pavouci pravděpodobně budou tarantule, stejně jako větší pavouci. Takže kdykoli se objeví nový pavouk, který je velký a chlupatý, bude mu přidělena vyšší pravděpodobnost, že bude tarantule. Všimněte si, že stále pracujeme s pravděpodobnostmi, je to proto, že ve své podstatě pracujeme s pravděpodobnostním algoritmem.

Učební část funguje změnou pravděpodobností. Algoritmus zpočátku začíná náhodným přiřazováním štítků „druhům“ jednotlivcům náhodnými korelacemi jako „být chlupatý“ a být „tatínek s dlouhými nohama“. Když to vytvoří takovou korelaci a tréninková datová sada s ní zřejmě nesouhlasí, je tento předpoklad zrušen.

Podobně, když korelace funguje dobře prostřednictvím několika příkladů, pokaždé se zesílí. Tato metoda klopýtání k pravdě je pozoruhodně efektivní díky mnoha matematickým jemnostem, s nimiž byste se jako začátečník nechtěli bát.

TensorFlow a trénink vlastního klasifikátoru květin

TensorFlow posouvá myšlenku strojového učení ještě dále. Ve výše uvedeném příkladu jste měli na starosti určení vlastností, které odlišují jeden druh pavouka od druhého. Museli jsme pečlivě měřit jednotlivé pavouky a vytvořit stovky takových záznamů.

Ale můžeme to udělat lépe, poskytnutím pouze nezpracovaných obrazových dat do algoritmu, můžeme nechat algoritmus najít vzory a porozumět různým věcem obrazu, jako je rozpoznání tvarů v obraze, pak pochopení, jaké jsou textury různých povrchů, barva , a tak dále. Toto je počáteční pojem počítačového vidění a můžete jej použít i pro jiné druhy vstupů, jako jsou zvukové signály a trénování algoritmu pro rozpoznávání hlasu. To vše spadá pod zastřešující termín „Deep Learning“, kde se strojové učení dostává do svého logického extrému.

Tuto zobecněnou sadu pojmů lze poté specializovat při práci s mnoha obrázky květin a jejich kategorizaci.

V níže uvedeném příkladu budeme používat Python2.7 front-end pro rozhraní s TensorFlow a k instalaci TensorFlow budeme používat pip (ne pip3). Podpora Pythonu 3 je stále trochu chybná.

Chcete-li vytvořit svůj vlastní klasifikátor obrázků, nejprve jej pomocí TensorFlow nainstalujte pomocí pip:

$ pip nainstalovat tensorflow

Dále musíme naklonovat tensorflow-for-poets-2 úložiště git. Toto je opravdu dobré místo pro začátek ze dvou důvodů:

  1. Je to jednoduché a snadno použitelné
  2. Přichází do určité míry předem vyškolený. Například klasifikátor květin je již vyškolen, aby pochopil, na jakou texturu se dívá a na jaké tvary se dívá, takže je výpočetně méně intenzivní.

Pojďme získat úložiště:

$ git clone https: // github.com / googlecodelabs / tensorflow-for-poets-2
$ cd tensorflow-for-poets-2

Toto bude náš pracovní adresář, takže všechny příkazy by od nynějška měly být vydávány v jeho rámci.

Stále musíme trénovat algoritmus pro konkrétní problém rozpoznávání květin, k tomu potřebujeme tréninková data, tak pojďme na to:

$ curl http: // stáhnout.tensorflow.org / ukázkové obrázky / květinové fotografie.tgz
| tar xz -C tf_files

Adresář… ./tensorflow-for-poets-2 / tf_files obsahuje hromadu těchto obrázků správně označených a připravených k použití. Obrázky budou sloužit ke dvěma různým účelům:

  1. Školení programu ML
  2. Testování programu ML

Můžete zkontrolovat obsah složky tf_files a zde zjistíte, že se zužujeme pouze na 5 kategorií květin, konkrétně sedmikrásky, tulipány, slunečnice, pampeliška a růže.

Trénink modelu

Výcvikový proces můžete zahájit tak, že nejprve nastavíte následující konstanty pro změnu velikosti všech vstupních obrazů na standardní velikost a použijete lehkou architekturu mobilenet:

$ IMAGE_SIZE = 224
$ ARCHITECTURE = "mobilenet_0.50 _ $ IMAGE_SIZE "

Poté spusťte příkaz python skript spuštěním příkazu:

$ python -m skripty.rekvalifikace \
--bottleneck_dir = tf_files / bottlenecks \
--how_many_training_steps = 500 \
--model_dir = tf_files / models / \
--summaries_dir = tf_files / training_summaries / "$ ARCHITECTURE" \
--output_graph = tf_files / retrained_graph.pb \
--output_labels = tf_files / retrained_labels.txt \
--architektura = "$ ARCHITECTURE" \
--image_dir = tf_files / flower_photos

I když je zde specifikováno mnoho možností, většina z nich specifikuje vaše adresáře vstupních dat a počet iterací, stejně jako výstupní soubory, kde by byly uloženy informace o novém modelu. Na průměrném notebooku by to nemělo trvat déle než 20 minut.

Jakmile skript dokončí trénink i testování, poskytne vám odhad přesnosti trénovaného modelu, který byl v našem případě mírně vyšší než 90%.

Použití trénovaného modelu

Nyní jste připraveni použít tento model pro rozpoznávání obrázků všech nových obrázků květin. Budeme používat tento obrázek:

Tvář slunečnice je stěží viditelná a to je pro náš model velká výzva:

Chcete-li získat tento obrázek z Wikimedia Commons, použijte wget:

$ wget https: // upload.wikimedia.org / wikipedia / commons / 2/28 / Sunflower_head_2011_G1.jpg
$ mv Sunflower_head_2011_G1.jpg tf_files / neznámé.jpg

Je uložen jako neznámý.jpg pod tf_files podadresář.

Nyní pro okamžik pravdy uvidíme, co náš model říká o tomto obrazu.K tomu vyvoláme label_image skript:

$ python -m skripty.label_image --graph = tf_files / retrained_graph.str --
image = tf_files / neznámý.jpg

Získali byste výstup podobný tomuto:

Čísla vedle typu květu představují pravděpodobnost, že náš neznámý obrázek patří do této kategorie. Například je to 98.04% jisté, že obrázek je slunečnice a je to jen 1.37% šance, že to bude růže.

Závěr

I při velmi průměrných výpočetních zdrojích vidíme ohromující přesnost při identifikaci obrázků. To jasně ukazuje sílu a flexibilitu TensorFlow.

Od této chvíle můžete začít experimentovat s různými jinými druhy vstupů nebo zkusit začít psát svou vlastní jinou aplikaci pomocí Pythonu a TensorFlow. Pokud chcete trochu lépe poznat vnitřní fungování strojového učení, je zde interaktivní způsob, jak to udělat.

Jak změnit levé a pravé tlačítko myši na počítači se systémem Windows 10
Je úplnou normou, že všechna zařízení počítačových myší jsou ergonomicky navržena pro praváky. K dispozici jsou však myší zařízení, která jsou speciál...
Emulace kliknutí myší vznášením pomocí myši Clickless Mouse ve Windows 10
Používání myši nebo klávesnice ve špatném držení těla nadměrného používání může mít za následek mnoho zdravotních problémů, včetně napětí, syndromu ka...
Přidejte gesta myši do Windows 10 pomocí těchto bezplatných nástrojů
V posledních letech se počítače a operační systémy značně vyvinuly. Bývaly doby, kdy uživatelé museli procházet správci souborů pomocí příkazů. Stejně...