TensorFlow

Začíname s TensorFlow

Začíname s TensorFlow
TensorFlow je mozog dieťaťa spoločnosti Google a jeho jadrom je knižnica pre numerické výpočty. Je napísaný v C / C ++ a má veľmi flexibilné API. Toto API je možné prepojiť s front-endom Pythonu, takže môžete písať malé útržky kódu Python, ktoré vám pomôžu vyriešiť komplikované problémy. Flexibilné a konzistentné API tiež umožňuje vývojárom používať rovnaký front-endový kód na spustenie na rôznych platformách, ako sú GPU Nvidia, univerzálne procesory a dokonca aj mobilné a vložené zariadenia, z ktorých každé má v back-endu veľmi odlišnú implementáciu.

TensorFlow našiel nesmierne využitie v oblasti strojového učenia práve preto, že strojové učenie zahŕňa veľa problémov a používa sa ako zovšeobecnená technika riešenia problémov. A hoci s ním budeme interagovať pomocou Pythonu, má rozhranie pre ďalšie jazyky, ako sú Go, Node.js a dokonca aj C #.

Tensorflow je ako čierna skrinka, ktorá v sebe skrýva všetky matematické jemnosti a vývojár iba volá správne funkcie na vyriešenie problému. Ale aký problém?

Strojové učenie (ML)

Predpokladajme, že navrhujete robota na hranie šachovej hry. Vďaka spôsobu, akým je šach navrhnutý, ako sa pohybujú jednotlivé figúrky a presne stanovenému cieľu hry, je celkom možné napísať program, ktorý by hru hral mimoriadne dobre. V skutočnosti by to v šachu prekabátilo celú ľudskú rasu. Vedelo by to presne, aký pohyb musí urobiť, vzhľadom na stav všetkých dielikov na doske.

Takýto program však môže hrať iba šach. Pravidlá hry sú zakomponované do logiky kódu a všetko, čo tento program robí, je vykonávať túto logiku dôsledne a presnejšie, ako by ktokoľvek dokázal. Nejde o algoritmus na všeobecné použitie, ktorý môžete použiť na návrh ľubovoľného herného robota.

Vďaka strojovému učeniu sa paradigma posúva a algoritmy sa stávajú čoraz všeobecnejšími.

Myšlienka je jednoduchá, začína sa definovaním problému s klasifikáciou. Napríklad chcete automatizovať proces identifikácie druhov pavúkov. Druhy, ktoré sú vám známe, sú rôzne triedy (nezamieňajte si s taxonomickými triedami) a cieľom algoritmu je roztriediť nový neznámy obrázok do jednej z týchto tried.

Tu by prvým krokom pre človeka bolo určiť vlastnosti rôznych jednotlivých pavúkov. Dodali by sme údaje o dĺžke, šírke, telesnej hmotnosti a farbe jednotlivých pavúkov spolu s druhmi, ku ktorým patria:

Dĺžka Šírka Omšu Farba Textúra Druhy
5 3 12 Hnedá hladký Ockove dlhé nohy
10 8 28 Hnedo-čierna chlpatý Tarantula

Vďaka rozsiahlej zbierke takýchto údajov o jednotlivých pavúkoch sa bude algoritmus „trénovať“ a ďalší podobný súbor údajov sa použije na testovanie algoritmu, aby sa zistilo, ako dobre funguje proti novým informáciám, s ktorými sa nikdy predtým nestretol, ale ktoré už poznáme odpoveď na.

Algoritmus sa začne náhodne. To znamená, že každý pavúk bez ohľadu na jeho vlastnosti by bol klasifikovaný ako ktokoľvek z druhu. Ak v našom súbore údajov existuje 10 rôznych druhov, potom by tento naivný algoritmus získal správnu klasifikáciu približne 1/10 času kvôli čistému šťastiu.

Potom by však začal prevládať aspekt strojového učenia. Začalo by to spájať určité funkcie s určitým výsledkom. Napríklad chlpaté pavúky budú pravdepodobne tarantule, rovnako tak aj väčšie pavúky. Takže vždy, keď sa objaví nový pavúk, ktorý je veľký a chlpatý, bude mu pridelená vyššia pravdepodobnosť, že bude tarantula. Všimnite si, že stále pracujeme s pravdepodobnosťami, je to preto, že vo svojej podstate pracujeme s pravdepodobnostným algoritmom.

Učebná časť funguje tak, že sa menia pravdepodobnosti. Algoritmus spočiatku začína náhodným priraďovaním „druhových“ štítkov jednotlivcom náhodnými koreláciami, napríklad „byť chlpatý“ a „byť tati dlhými nohami“. Ak to urobí takúto koreláciu a zdá sa, že s ňou nesúhlasí školiaci dátový súbor, je tento predpoklad zrušený.

Podobne, keď korelácia funguje na niekoľkých príkladoch, zakaždým sa posilní. Táto metóda klopýtania k pravde je pozoruhodne efektívna vďaka množstvu matematických jemností, s ktorými by ste sa ako začiatočníci nechceli báť.

TensorFlow a školenie vlastného klasifikátora kvetov

TensorFlow posúva myšlienku strojového učenia ešte ďalej. Vo vyššie uvedenom príklade ste mali na starosti určenie znakov, ktoré odlišujú jeden druh pavúka od druhého. Museli sme starostlivo merať jednotlivé pavúky a vytvárať stovky takýchto záznamov.

Ale môžeme to urobiť lepšie, poskytnutím iba nespracovaných obrazových údajov algoritmu, môžeme nechať algoritmus nájsť vzory a porozumieť rôznym veciam na obraze, napríklad rozpoznávať tvary v obraze, potom porozumieť textúre rôznych povrchov, farbe , tak ďalej a tak ďalej. Toto je počiatočný pojem počítačového videnia a môžete ho použiť aj na iné druhy vstupov, ako sú zvukové signály a trénovanie algoritmu rozpoznávania hlasu. To všetko spadá pod zastrešujúci pojem „Deep Learning“, kde sa strojové učenie dostáva do logického extrému.

Túto zovšeobecnenú množinu pojmov je potom možné špecializovať pri práci s množstvom obrázkov kvetov a ich kategorizácii.

V príklade nižšie použijeme Python2.7 front-end na rozhranie s TensorFlow a na inštaláciu TensorFlow budeme používať pip (nie pip3). Podpora Pythonu 3 je stále trochu chybná.

Ak chcete vytvoriť svoj vlastný klasifikátor obrázkov, najskôr ho pomocou TensorFlow nainštalujeme pomocou pip:

$ pip nainštalovať tensorflow

Ďalej musíme naklonovať tensorflow-for-poets-2 úložisko git. Toto je naozaj dobré miesto pre začiatok z dvoch dôvodov:

  1. Je to jednoduché a ľahko použiteľné
  2. Do istej miery to prichádza vopred vyškolené. Napríklad klasifikátor kvetov je už vyškolený v tom, aby pochopil, na akú textúru sa pozerá a na aké tvary sa pozerá, takže je výpočtovo menej intenzívny.

Poďme získať úložisko:

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

Toto bude náš pracovný adresár, takže všetky príkazy by sa odteraz mali vydávať z jeho vnútra.

Stále musíme trénovať algoritmus pre konkrétny problém rozpoznávania kvetov, na to potrebujeme tréningové údaje, takže poďme na to:

$ curl http: // stiahnuť.tensorflow.org / priklad_obrázkov / kvet_fotky.tgz
| tar xz -C tf_files

Adresár .. ./tensorflow-for-poets-2 / tf_files obsahuje množstvo týchto obrázkov správne označených a pripravených na použitie. Obrázky budú slúžiť na dva rôzne účely:

  1. Školenie programu ML
  2. Testovanie programu ML

Môžete skontrolovať obsah priečinka tf_files a tu zistíte, že sa zužujeme iba na 5 kategórií kvetov, a to sedmokrásky, tulipány, slnečnice, púpava a ruže.

Školenie modelu

Výcvikový proces môžete začať najskôr nastavením nasledujúcich konštánt na zmenu veľkosti všetkých vstupných obrázkov na štandardnú veľkosť a použitím ľahkej architektúry mobilenet:

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

Potom vyvolajte pythonovský skript spustením príkazu:

$ python -m skripty.preškoliť \
--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 \
--architecture = "$ ARCHITECTURE" \
--image_dir = tf_files / flower_photos

Aj keď je tu špecifikovaných veľa možností, väčšina z nich určuje vaše adresáre vstupných údajov a počet iterácií, ako aj výstupné súbory, kam by sa ukladali informácie o novom modeli. Spustenie na priemernom notebooku by nemalo trvať dlhšie ako 20 minút.

Akonáhle skript dokončí výcvik aj testovanie, poskytne vám odhad presnosti trénovaného modelu, ktorý bol v našom prípade o niečo vyšší ako 90%.

Pomocou trénovaného modelu

Teraz ste pripravení použiť tento model na rozpoznávanie obrázkov všetkých nových obrázkov kvetov. Budeme používať tento obrázok:

Tvár slnečnice je sotva viditeľná a to je pre náš model veľká výzva:

Na získanie tohto obrázka z Wikimedia Commons použite wget:

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

Uloží sa ako neznámy.jpg pod tf_files podadresár.

Teraz, pre okamih pravdy, uvidíme, čo hovorí náš model na tento obraz.Aby sme to dosiahli, vyvolávame label_image scenár:

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

Získali by ste výstup podobný tomuto:

Čísla vedľa typu kvetu predstavujú pravdepodobnosť, že náš neznámy obrázok patrí do tejto kategórie. Napríklad je to 98.04% istý, že obrázok je slnečnice a je to iba 1.37% šanca, že to bude ruža.

Záver

Aj pri veľmi priemerných výpočtových zdrojoch vidíme ohromujúcu presnosť pri identifikácii obrázkov. To jasne demonštruje silu a flexibilitu TensorFlow.

Od tejto chvíle môžete začať experimentovať s rôznymi inými druhmi vstupov alebo skúsiť začať písať svoju vlastnú odlišnú aplikáciu pomocou jazykov Python a TensorFlow. Ak chcete trochu lepšie spoznať vnútorné fungovanie strojového učenia, tu je interaktívny spôsob, ako to urobiť.

Hry Battle For Wesnoth 1.13.6 Vývoj uvoľnený
Battle For Wesnoth 1.13.6 Vývoj uvoľnený
Battle For Wesnoth 1.13.6 vydané minulý mesiac, je šiestym vývojovým vydaním v 1.13.séria x a prináša množstvo vylepšení, najmä používateľského rozhra...
Hry Ako nainštalovať League Of Legends na Ubuntu 14.04
Ako nainštalovať League Of Legends na Ubuntu 14.04
Ak ste fanúšikom League of Legends, potom je to pre vás príležitosť otestovať spustenie League of Legends. Upozorňujeme, že program PlayOnLinux podpor...
Hry Nainštalujte si najnovšiu strategickú hru OpenRA na Ubuntu Linux
Nainštalujte si najnovšiu strategickú hru OpenRA na Ubuntu Linux
OpenRA je herný engine Libre / Free Real Time Strategy, ktorý obnovuje rané hry z Westwoodu, ako napríklad klasické Command & Conquer: Red Alert. Dist...