Co je TensorFlow? Jak to funguje? Architecture & Features
⚡ Chytré shrnutí
TensorFlow je open-source platforma Google vytvořeno pro strojové učení, reprezentující každý výpočet jako graf datového toku tenzorů. Tento přehled zahrnuje architekturu, komponenty, způsob provádění výpočtu a způsob předávání dat vstupním kanálem.

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časné době je nejznámější knihovnou pro hluboké učení na světě GoogleTensorFlow je. Google aplikuje strojové učení ve všech svých produktech ke zlepšení vyhledávání, překladu, popisků obrázků a doporučení.
Příklad TensorFlow
Abych uvedl konkrétní příklad, Google Uživatelé mohou s umělou inteligencí zažít rychlejší a propracovanější vyhledávání. Pokud uživatel zadá klíčové slovo do vyhledávacího řádku, Google poskytuje doporučení, jaké by mohlo být další slovo.

Google chce využít strojové učení k využití svých obrovských datových sad a poskytnout uživatelům co nejlepší uživatelský zážitek. Strojové učení využí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 Nejenže uchovává velké datové sady, ale také provozuje obrovskou výpočetní infrastrukturu, takže TensorFlow byl od samého začátku navržen pro škálování. TensorFlow je knihovna vyvinutá společností Google Brain Team pro urychlení strojového učení a výzkumu hlubokých 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 pár lety začalo hluboké učení překonávat všechny ostatní algoritmy strojového učení při zpracování obrovského množství dat. Google viděl, že by mohl tyto hluboké neuronové sítě využít ke zlepšení svých služeb:
- Gmail
- Fotografie
- Google vyhledávač
Vytvořili rámec s názvem TensorFlow aby výzkumníci a vývojáři mohli pracovat na stejném modelu a poté jej nasadit v měřítku, které by mohlo používat mnoho lidí.
TensorFlow byl veřejně vydán v listopadu 2015 a verze 1.0 následovala v únoru 2017. Mnohem větší změna přišla s... TensorFlow 2.0 v září 2019, který z Eagerova spuštění udělal výchozí a přijal Keras jako standardní API na vysoké úrovni. Od verze 2.16 je Keras 3 výchozí a stejný modelový kód lze spustit i v JAX nebo Py.Torch backendy.
TensorFlow je vydáván pod licencí Apache 2.0, takže jej můžete používat, upravovat a dále distribuovat, a to i komerčně, bez placení. Google.
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.
Kde může TensorFlow běžet?
Hardwarové a softwarové požadavky TensorFlow spadají do dvou fází:
Fáze vývoje: v tomto případě trénujete model, obvykle na stolním počítači nebo notebooku.
Fáze běhu nebo inferencePo dokončení trénování může model běžet na mnoha platformách:
- 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. Kolem roku 2009 vědci ze Stanfordu ukázali, že GPU jsou extrémně efektivní v operacích s maticemi a lineární algebrou, na kterých jsou neuronové sítě závislé. Hluboké učení se spoléhá na velké množství násobení matic. TensorFlow je velmi rychlý při výpočtu násobení matic, protože je napsán v jazyce... 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.
Ještě jednou významnou vlastností je TensorBoard, který vizualizuje graf, trénovací metriky a rozložení vah během běhu modelu.
Komponenty TensorFlow
tensor
Název TensorFlow je přímo odvozen od jeho základního frameworku: tensorV TensorFlow všechny výpočty zahrnují tenzory. Tenzor je 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:
- Běží na více CPU nebo GPU a dokonce i na mobilních operačních systémech
- 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
- Graf má uzly a hrany. Každý uzel provádí matematickou operaci a produkuje výstup, zatímco hrany popisují vstupní a výstupní vztahy mezi uzly. Samotné tenzory se pohybují podél hran.
Proč je TensorFlow populární?
TensorFlow je široce používán, protože je přístupný na všech úrovních odbornosti. Jeho API pokrývají vše od třířádkového modelu Keras až po ručně sestavenou CNN nebo RNN. Protože výpočet je vyjádřen jako graf, TensorBoard dokáže vizualizovat síť a výrazně usnadnit ladění. Lze jej také nasazovat ve velkém měřítku, běží na CPU, GPU a TPU a také na mobilních zařízeních prostřednictvím TensorFlow Lite.
TensorFlow zůstává jedním ze dvou nejpoužívanějších frameworků pro hluboké učení na GitHubu, vedle Py.Torch.
TensorFlow Algorithms
TensorFlow je dodáván s vysoce úrovní odhadů pro několik klasických algoritmů. V TensorFlow 1.x se tyto nacházely pod souborem tf.estimator:
- Lineární regrese: tf.estimator.LinearRegressor
- Klasifikace: tf.estimator.LinearClassifier
- Klasifikace hlubokého učení: tf.estimator.DNNClassifier
- Široké a hluboké učení: tf.estimator.DNNLinearCombinedClassifier
- Zesílená stromová regrese: tf.estimator.BoostedTreesRegressor
- Posílená klasifikace stromů: tf.estimator.BoostedTreesClassifier
TensorFlow vs. PyTorch: Který byste si měli vybrat?
TensorFlow a PyTorch jsou dva dominantní frameworky pro hluboké učení a praktické rozdíly se od doby, kdy TensorFlow 2.0 přijal eager execution, značně zmenšily.
| Kritéria | TensorFlow | PyTorch |
|---|---|---|
| Developed by | Google Mozek | Meta AI |
| Provedení | Eager, s volitelnou kompilací grafů | Eager, s volitelnou kompilací |
| API na vysoké úrovni | Keras, postavený v roce | Samostatné knihovny, jako například Lightning |
| Mobilní a edge | Zralé, prostřednictvím TensorFlow Lite | Zlepšování prostřednictvím ExecuTorch |
| Nasazení prohlížeče | TensorFlow.js | Vyžaduje konverzi na ONNX |
| Typická pevnost | Produkce a nasazení | Výzkum a experimentování |
Pragmatická odpověď: zvolte TensorFlow, když je nutné model doručit na mobilní zařízení, do prohlížeče nebo na spravovaný server, a zvolte Py.Torch při iteraci architektury modelu. Keras 3, výchozí verze od TensorFlow 2.16 a novější, dále změkčuje rozhodování, protože stejný kód Keras lze spustit na TensorFlow, JAX nebo Py.Torch backend.
Jak fungují výpočty v TensorFlow
⚠️ Poznámka k verzi: níže uvedené návody používají TensorFlow 1.x styl grafu a relace, což je nejjasnější způsob, jak vidět, jak graf toku dat skutečně funguje. Funkce tf.placeholder(), tf.Session() a make_initializable_iterator() byly v TensorFlow 2.0 odstraněny. a v aktuální instalaci vyvolá AttributeError. Sekce TensorFlow 1.x vs. TensorFlow 2.x dále níže uvádí moderní ekvivalent každého příkladu.
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 elementární pracovní postup TensorFlow na jednoduchých příkladech. Vytvořme výpočetní graf, který vynásobí dvě čísla.
V tomto příkladu vynásobíme X_1 a X_2. TensorFlow vytvoří uzel pro spojení operace. V našem příkladu se to nazývá násobení. Jakmile je graf určen, výpočetní enginy TensorFlow 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ž v TensorFlow vytváříme uzel, musíme si zvolit, jaký typ uzlu chceme vytvořit. Uzly X1 a X2 budou zástupnými uzly. Zástupný uzel 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")
Zástupný symbol potřebuje datový typ. Jedná se o čísla, takže tf.float32 je správná volba. Argument název je volitelný, ale užitečný, protože se jedná o popisek, který se zobrazí ve vizualizaci grafu v TensorBoardu. X_2 je definováno stejným způsobem.
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
Pro spuštění operací v grafu musíme vytvořit relaci. V TensorFlow se to provádí pomocí tf.Session(). Nyní, když máme relaci, můžeme ji požádat o spuštění operací na našem výpočetním grafu voláním session. Pro spuštění výpočtu musíme použít run.
Když se spustí operace násobení, potřebuje hodnoty uzlů X_1 a X_2, takže je zadáte za běhu. Toho dosáhneme zadáním parametru s názvem feed_dict. Pro X_1 předáme hodnoty 1, 2 a 3 a pro X_2 4, 5 a 6.
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ětiJe to nejjednodušší metoda. Všechna data načtete do paměti jako jedno pole. Zapíšete je prosté Python pro toto; nic z toho není specifické pro TensorFlow.
2. Datový kanál TensorFlowTensorFlow poskytuje vestavěné API, které načítá data, aplikuje transformace a dodává data do modelu. Tato metoda funguje velmi dobře, zejména pokud máte velkou datovou sadu. Například obrazové záznamy jsou známé svou obrovskou velikostí a nevejdou se do paměti. Datový kanál si paměť spravuje 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ání dat pomocí kanálu 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 je potřeba vytvořit TensorFlow pipeline. Pipeline bude načítat data dávkově nebo po malých blocích. Každá dávka bude odeslána do pipeline a připravena k trénování. Vytvoření pipeline 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 napříč více CPU. To zrychluje výpočet a umožňuje praktické trénování větších sítí.
Stručně řečeno: načtěte malé datové sady do paměti pomocí PAND a použijte TensorFlow pipeline, když jsou data velká nebo když chcete paralelní načítání napříč více CPU.
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í se podívá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))
[0.8835775 0.23766978]
TensorFlow 1.x vs. TensorFlow 2.x: Co se změnilo
TensorFlow 2.0 byl převratným přepracováním uživatelsky orientovaného API. Pochopení tohoto rozdílu je důležité, protože velké množství online tutoriálů, včetně výše uvedených příkladů, cílí na styl 1.x.
| Pojem | TensorFlow 1.x | TensorFlow 2.x |
|---|---|---|
| Model provedení | Definujte graf a poté ho spusťte | Ve výchozím nastavení je Eager, operace se spouštějí okamžitě. |
| Údaje o krmení | tf.placeholder plus feed_dict | Přejít Python hodnoty nebo tenzory přímo |
| Spuštění operací | tf.Session().run() | Zavolejte funkci, není potřeba žádná relace |
| API na vysoké úrovni | tf.estimator | Keras, tf.keras |
| Optimalizace grafů | Vždy založené na grafech | Přihlaste se k používání dekorátoru @tf.function |
| Iterace datové sady | make_initializable_iterator() | Prostý Python smyčka for prochází datovou sadu |
Příklad násobení, přepsaný. Tři kroky a jedna relace se stanou jedním řádkem, protože operace se provede v okamžiku jejího volání:
import tensorflow as tf X_1 = tf.constant([1, 2, 3], dtype=tf.float32) X_2 = tf.constant([4, 5, 6], dtype=tf.float32) result = tf.multiply(X_1, X_2, name="multiply") print(result.numpy()) # [ 4. 10. 18.]
Vstupní kanál, přepsaný. Nejsou vyžadovány žádné zástupné symboly ani objekty iterátoru:
import numpy as np import tensorflow as tf x_input = np.random.sample((1, 2)) dataset = tf.data.Dataset.from_tensor_slices(x_input) for batch in dataset: print(batch.numpy())
Pokud potřebujete rychlost kompilovaného grafu, zabalte funkci do @tf.function a TensorFlow. tracautomaticky ho převede do jednoho. Starší skripty verze 1.x lze také spustit beze změny prostřednictvím jmenného prostoru tf.compat.v1, ačkoli tato cesta je určena pouze pro údržbu a neměla by se používat pro novou práci.
TensorFlow: Klíčové poznatky a Code Odkaz
- 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 používají převážně akademici, startupy a velké společnosti. Google používá TensorFlow téměř ve všech Google denních produktů včetně Gmail, Fotografie a Google Vyhledávač.
- Jedno Google Tým Brain vyvinul TensorFlow, aby překlenul propast mezi výzkumníky a vývojáři produktů. V roce 2015 zveřejnil TensorFlow a jeho popularita rychle roste. V dnešní době je TensorFlow knihovnou pro hluboké učení s největším počtem repozitářů na GitHubu.
- Odborníci z praxe používají TensorFlow, protože se snadno nasazují ve velkém měřítku, v cloudu, v prohlížeči nebo na mobilních zařízeních s operačním systémem iOS a... Android.
TensorFlow pracuje 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í pro výpočet. 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 z běžných 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))
