Co je TensorFlow? Jak to funguje? Úvod & Architecture
Začněme tento tutoriál úvodem TensorFlow:
Co je TensorFlow?
TensorFlow je open-source end-to-end platforma pro vytváření aplikací strojového učení. Jedná se o symbolickou matematickou knihovnu, která využívá tok dat a diferencovatelné programování k provádění různých úkolů zaměřených na trénování a vyvozování hlubokých neuronových sítí. Umožňuje vývojářům vytvářet aplikace pro strojové učení pomocí různých nástrojů, knihoven a zdrojů komunity.
V současnosti je nejznámější knihovnou hlubokého učení na světě TensorFlow od Googlu. Produkt Google využívá strojové učení ve všech svých produktech ke zlepšení vyhledávače, překladu, titulků obrázků nebo doporučení.
Příklad TensorFlow
Abychom uvedli konkrétní příklad, uživatelé Googlu mohou s AI zažít rychlejší a propracovanější vyhledávání. Pokud uživatel zadá klíčové slovo do vyhledávacího pole, Google mu poskytne doporučení, jaké by mohlo být další slovo.

Google chce pomocí strojového učení využít jejich masivních datových sad, aby uživatelům poskytl ten nejlepší zážitek. Strojové učení používají tři různé skupiny:
- Výzkumníci
- Datoví vědci
- Programátoři
Všichni mohou používat stejnou sadu nástrojů ke vzájemné spolupráci a zlepšování své efektivity.
Google nemá jen tak nějaká data; mají nejmasivnější počítač na světě, takže Tensor Flow byl postaven v měřítku. TensorFlow je knihovna vyvinutá týmem Google Brain za účelem urychlení strojového učení a hlubokého výzkumu neuronových sítí.
Byl postaven tak, aby běžel na více CPU nebo GPU a dokonce i na mobilních operačních systémech, a má několik obalů v několika jazycích, jako je Python, C++ or Java.
Historie TensorFlow
Před několika lety začalo hluboké učení překonávat všechny ostatní algoritmy strojového učení při poskytování obrovského množství dat. Google viděl, že by mohl využít tyto hluboké neuronové sítě ke zlepšení svých služeb:
- Gmail
- Fotografie
- Vyhledávač Google
Budují rámec tzv tenzorový tok umožnit výzkumníkům a vývojářům spolupracovat na modelu umělé inteligence. Jakmile je vyvinut a škálován, umožňuje to používat mnoha lidem.
Poprvé byl zveřejněn na konci roku 2015, zatímco první stabilní verze se objevila v roce 2017. Jedná se o open source pod licencí Apache Open Source. Můžete ji používat, upravovat a redistribuovat upravenou verzi za poplatek, aniž byste společnosti Google cokoli platili.
Dále v tomto výukovém programu TensorFlow Deep se dozvíme o architektuře TensorFlow a o tom, jak TensorFlow funguje.
Jak TensorFlow funguje
TensorFlow vám umožňuje vytvářet grafy a struktury toku dat, které definují, jak se data pohybují v grafu, a to tak, že vstupy vezmete jako vícerozměrné pole zvané Tensor. Umožňuje vám sestavit vývojový diagram operací, které lze provádět na těchto vstupech, které jsou na jednom konci a na druhém konci jako výstup.
TensorFlow Architecture
Architektura Tensorflow funguje ve třech částech:
- Předzpracování dat
- Sestavte model
- Trénujte a odhadujte model
Nazývá se Tensorflow, protože přijímá vstup jako vícerozměrné pole, známé také jako tenzory. Můžete si vytvořit určitý druh vývojový diagram operací (nazývaných graf), které chcete na tomto vstupu provést. Vstup jde dovnitř na jednom konci a pak protéká tímto systémem více operací a vychází na druhém konci jako výstup.
To je důvod, proč se nazývá TensorFlow, protože tenzor v něm prochází seznamem operací a pak vychází na druhé straně.
Kde může Tensorflow běžet?
Hardware TensorFlow a softwarové požadavky lze zařadit do
Vývojová fáze: Toto je, když trénujete režim. Školení se obvykle provádí na vašem stolním počítači nebo notebooku.
Run Phase nebo Inference Phase: Po dokončení tréninku lze Tensorflow spustit na mnoha různých platformách. Můžete to spustit
- Desktop běží Windows, macOS nebo Linux
- Cloud jako webová služba
- Mobilní zařízení jako iOS a Android
Můžete to trénovat na více strojích a poté to můžete spustit na jiném stroji, jakmile budete mít trénovaný model.
Model lze trénovat a používat na GPU i CPU. GPU byly původně navrženy pro videohry. Koncem roku 2010 výzkumníci ze Stanfordu zjistili, že GPU je také velmi dobrý v maticových operacích a algebře, takže je velmi rychlý pro provádění těchto druhů výpočtů. Hluboké učení se spoléhá na velké množství maticového násobení. TensorFlow je velmi rychlý při výpočtu násobení matice, protože je zapsán C++. Přestože je implementován v C++, K TensorFlow lze přistupovat a ovládat je především pomocí jiných jazyků, Python.
A konečně, významnou funkcí TensorFlow je TensorBoard. The TensorBoard umožňuje graficky a vizuálně sledovat, co TensorFlow dělá.
Komponenty TensorFlow
tensor
Název Tensorflow je přímo odvozen z jeho základního rámce: tensor. V Tensorflow všechny výpočty zahrnují tenzory. Tenzor je a vektor or matice n-dimenzí, které představují všechny typy dat. Všechny hodnoty v tenzoru obsahují identický datový typ se známým (nebo částečně známým) formovat. Tvar dat je rozměr matice nebo pole.
Tenzor může pocházet ze vstupních dat nebo z výsledku výpočtu. V TensorFlow jsou všechny operace prováděny uvnitř a graf. Graf je soubor výpočtů, které probíhají postupně. Každá operace se nazývá an op uzel a jsou vzájemně propojeny.
Graf ukazuje operace a spojení mezi uzly. Nezobrazuje však hodnoty. Hrana uzlů je tenzor, tj. způsob, jak naplnit operaci daty.
Grafy
TensorFlow využívá grafu. Graf shromažďuje a popisuje všechny sériové výpočty provedené během školení. Graf má mnoho výhod:
- Bylo provedeno pro běh na více CPU nebo GPU a dokonce i na mobilním operačním systému
- Přenositelnost grafu umožňuje zachovat výpočty pro okamžité nebo pozdější použití. Graf lze uložit pro budoucí provedení.
- Všechny výpočty v grafu se provádějí spojením tenzorů dohromady
- Tenzor má uzel a hranu. Uzel provádí matematickou operaci a vytváří výstupy koncových bodů. Hrany a hrany vysvětlují vstupní/výstupní vztahy mezi uzly.
Proč je TensorFlow populární?
TensorFlow je nejlepší knihovna ze všech, protože je vytvořena tak, aby byla přístupná všem. Knihovna Tensorflow obsahuje různá rozhraní API pro architekturu hlubokého učení, jako je CNN nebo RNN. TensorFlow je založen na grafovém výpočtu; umožňuje vývojáři vizualizovat konstrukci neuronové sítě pomocí Tensorboad. Tento nástroj je užitečný pro ladění programu. A konečně, Tensorflow je navržen tak, aby mohl být nasazen ve velkém měřítku. Běží na CPU a GPU.
Tensorflow přitahuje největší popularitu na GitHubu ve srovnání s jiným rámcem hlubokého učení.
TensorFlow Algorithms
Níže jsou uvedeny algoritmy podporované TensorFlow:
V současné době má TensorFlow 1.10 vestavěné API pro:
- Lineární regrese: tf.estimator.LinearRegressor
- Klasifikace:tf.estimator.LinearClassifier
- Klasifikace hlubokého učení: tf.estimator.DNNClassifier
- Hluboké učení vymazání a hluboké: tf.estimator.DNNLinearCombinedClassifier
- Posilovací stromová regrese: tf.estimator.BoostedTreesRegressor
- Posílená klasifikace stromů: tf.estimator.BoostedTreesClassifier
Jak fungují výpočty v TensorFlow
import numpy as np import tensorflow as tf
V prvních dvou řádcích kódu jsme importovali tensorflow jako tf. S Python, je běžnou praxí používat pro knihovnu krátký název. Výhodou je vyhnout se zadávání celého názvu knihovny, když ji potřebujeme použít. Například můžeme importovat tensorflow jako tf a volat tf, když chceme použít funkci tensorflow
Pojďme si procvičit základní pracovní postup Tensorflow na jednoduchých příkladech TensorFlow. Vytvořme výpočtový graf, který vynásobí dvě čísla dohromady.
Během příkladu vynásobíme X_1 a X_2 dohromady. Tensorflow vytvoří uzel pro připojení operace. V našem příkladu se nazývá násobení. Když je určen graf, výpočetní motory Tensorflow spolu vynásobí X_1 a X_2.
Nakonec spustíme relaci TensorFlow, která spustí výpočetní graf s hodnotami X_1 a X_2 a vytiskne výsledek násobení.
Definujme vstupní uzly X_1 a X_2. Když vytváříme uzel v Tensorflow, musíme si vybrat, jaký typ uzlu vytvořit. Uzly X1 a X2 budou zástupným uzlem. Zástupný symbol přiřadí novou hodnotu pokaždé, když provedeme výpočet. Vytvoříme je jako zástupný uzel TF dot.
Krok 1: Definujte proměnnou
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2")
Když vytvoříme zástupný uzel, musíme předat datový typ, který sem bude přidávat čísla, abychom mohli použít datový typ s plovoucí desetinnou čárkou, použijme tf.float32. Tento uzel také musíme pojmenovat. Tento název se zobrazí, když se podíváme na grafické vizualizace našeho modelu. Pojmenujme tento uzel X_1 předáním parametru jménem name s hodnotou X_1 a nyní stejným způsobem definujme X_2. X_2.
Krok 2: Definujte výpočet
multiply = tf.multiply(X_1, X_2, name = "multiply")
Nyní můžeme definovat uzel, který provádí operaci násobení. V Tensorflow to můžeme udělat vytvořením uzlu tf.multiply.
Uzel X_1 a X_2 předáme uzlu násobení. Říká tensorflow, aby propojil tyto uzly ve výpočetním grafu, takže ho žádáme, aby vytáhl hodnoty z x a y a vynásobil výsledek. Dejme také násobícímu uzlu název multiply. Je to celá definice pro náš jednoduchý výpočetní graf.
Krok 3: Proveďte operaci
Abychom mohli provádět operace v grafu, musíme vytvořit relaci. V Tensorflow to dělá tf.Session(). Nyní, když máme relaci, můžeme relaci požádat, aby spustila operace na našem výpočetním grafu voláním relace. Pro spuštění výpočtu musíme použít run.
Když se spustí operace sčítání, zjistí, že potřebuje získat hodnoty uzlů X_1 a X_2, takže musíme také vložit hodnoty pro X_1 a X_2. Můžeme to udělat zadáním parametru s názvem feed_dict. Předáme hodnotu 1,2,3 pro X_1 a 4,5,6 pro X_2.
Výsledky vytiskneme print(result). Měli bychom vidět 4, 10 a 18 pro 1×4, 2×5 a 3×6
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2") multiply = tf.multiply(X_1, X_2, name = "multiply") with tf.Session() as session: result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]}) print(result)
[ 4. 10. 18.]
Možnosti načítání dat do TensorFlow
První krok před tréninkem a algoritmus strojového učení je načíst data. Existují dva běžné způsoby načítání dat:
1. Načíst data do paměti: Je to nejjednodušší metoda. Všechna data načtete do paměti jako jediné pole. Můžete napsat a Python kód. Tyto řádky kódu nesouvisí s Tensorflow.
2. Datový kanál Tensorflow: Tensorflow má vestavěné API, které vám pomůže snadno načíst data, provést operaci a napájet algoritmus strojového učení. Tato metoda funguje velmi dobře, zejména pokud máte velký soubor dat. Například je známo, že obrazové záznamy jsou obrovské a nevejdou se do paměti. Datový kanál spravuje paměť sám
Jaké řešení použít?
Načíst data do paměti
Pokud vaše datová sada není příliš velká, tj. menší než 10 gigabajtů, můžete použít první metodu. Data se vejdou do paměti. K importu souborů CSV můžete použít slavnou knihovnu Pandas. Více o pandách se dozvíte v dalším tutoriálu.
Načtěte data pomocí potrubí Tensorflow
Druhá metoda funguje nejlépe, pokud máte velkou datovou sadu. Pokud máte například datovou sadu 50 gigabajtů a váš počítač má pouze 16 gigabajtů paměti, počítač se zhroutí.
V této situaci musíte vybudovat potrubí Tensorflow. Potrubí načte data v dávce nebo malé části. Každá dávka bude tlačena do potrubí a připravena na školení. Vybudování potrubí je vynikajícím řešením, protože umožňuje používat paralelní výpočty. To znamená, že Tensorflow bude trénovat model na více CPU. Podporuje výpočty a umožňuje trénovat výkonné neuronové sítě.
V dalších tutoriálech uvidíte, jak vybudovat významný kanál pro napájení vaší neuronové sítě.
Stručně řečeno, pokud máte malou datovou sadu, můžete načíst data do paměti pomocí knihovny Pandas.
Pokud máte velkou datovou sadu a chcete využívat více CPU, bude pro vás pohodlnější pracovat s potrubím Tensorflow.
Jak vytvořit TensorFlow Pipeline
Zde jsou kroky k vytvoření potrubí TensorFlow:
V předchozím příkladu jsme ručně přidali tři hodnoty pro X_1 a X_2. Nyní uvidíme, jak načíst data do Tensorflow:
Krok 1) Vytvořte data
Nejprve použijeme numpy knihovnu ke generování dvou náhodných hodnot.
import numpy as np x_input = np.random.sample((1,2)) print(x_input)
[[0.8835775 0.23766977]]
Krok 2) Vytvořte zástupný symbol
Stejně jako v předchozím příkladu vytvoříme zástupný symbol s názvem X. Potřebujeme explicitně specifikovat tvar tenzoru. V případě načteme pole pouze se dvěma hodnotami. Tvar můžeme zapsat jako tvar=[1,2]
# using a placeholder x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
Krok 3) Definujte metodu datové sady
Dále musíme definovat Dataset, kde můžeme naplnit hodnotu zástupného symbolu x. Musíme použít metodu tf.data.Dataset.from_tensor_slices
dataset = tf.data.Dataset.from_tensor_slices(x)
Krok 4) Vytvořte potrubí
Ve čtvrtém kroku musíme inicializovat kanál, kudy budou proudit data. Musíme vytvořit iterátor s make_initializable_iterator. Říkáme tomu iterátor. Potom musíme zavolat tento iterátor, abychom dodali další dávku dat, get_next. Tento krok pojmenujeme get_next. Všimněte si, že v našem příkladu existuje pouze jedna dávka dat s pouze dvěma hodnotami.
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
Krok 5) Proveďte operaci
Poslední krok je podobný předchozímu příkladu. Zahájíme relaci a spustíme iterátor operace. Podáváme feed_dict s hodnotou generovanou otupělý. Tyto dvě hodnoty vyplní zástupný symbol x. Poté spustíme get_next a vytiskneme výsledek.
with tf.Session() as sess: # feed the placeholder with data sess.run(iterator.initializer, feed_dict={ x: x_input }) print(sess.run(get_next)) # output [ 0.52374458 0.71968478]
[0.8835775 0.23766978]
Shrnutí
- Význam TensorFlow: TensorFlow je nejznámější knihovnou pro hluboké učení posledních let. Praktik používající TensorFlow může vytvořit jakoukoli strukturu hlubokého učení, jako je CNN, RNN nebo jednoduchá umělá neuronová síť.
- TensorFlow většinou používají akademici, startupy a velké společnosti. Google používá TensorFlow téměř ve všech každodenních produktech Google včetně Gmailu, fotografií a vyhledávače Google.
- Tým Google Brain vyvinul TensorFlow, aby zaplnil mezeru mezi výzkumníky a vývojáři produktů. V roce 2015 zveřejnili TensorFlow; rychle roste v oblibě. V současné době je TensorFlow knihovnou pro hluboké učení s největším počtem úložišť na GitHubu.
- Praktici používají Tensorflow, protože je snadné jej nasadit ve velkém měřítku. Je vytvořen pro práci v cloudu nebo na mobilních zařízeních, jako jsou iOs a Android.
Tensorflow funguje v relaci. Každá relace je definována grafem s různými výpočty. Jednoduchým příkladem může být násobení číslem. V Tensorflow jsou vyžadovány tři kroky:
- Definujte proměnnou
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2")
- Definujte výpočet
multiply = tf.multiply(X_1, X_2, name = "multiply")
- Proveďte operaci
with tf.Session() as session: result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]}) print(result)
Jednou běžnou praxí v Tensorflow je vytvoření kanálu pro načítání dat. Pokud budete postupovat podle těchto pěti kroků, budete moci načíst data do TensorFLow:
- Vytvořte data
import numpy as np x_input = np.random.sample((1,2)) print(x_input)
- Vytvořte zástupný symbol
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
- Definujte metodu datové sady
dataset = tf.data.Dataset.from_tensor_slices(x)
- Vytvořte potrubí
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
- Spusťte program
with tf.Session() as sess: sess.run(iterator.initializer, feed_dict={ x: x_input }) print(sess.run(get_next))