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.

  • 🧮 Jádrový objekt: Tenzor je n-rozměrné pole, jehož hodnoty sdílejí jeden datový typ a známý nebo částečně známý tvar.
  • 🔗 Grafický model: Uzly nesou operace, hrany nesou tenzory a celý graf lze uložit, přenést a později přehrát.
  • 🏗️ Třístupňový Archistruktura: Předzpracujte data, sestavte model, poté jej natrénujte a vyhodnoťte.
  • ⚠️ Hranice verze: tf.placeholder a tf.Session patří do TensorFlow 1.x a byly odstraněny ve verzi 2.0, která ve výchozím nastavení běží Eaglesly.
  • 💾 Načítání dat: Načtěte malé datové sady do paměti pomocí PANDAS a pro cokoli, co je příliš velké na to, aby se tam vešlo, použijte tf.data pipelines.
  • 📊 Monitoring: TensorBoard vizualizuje graf, metriky a rozložení vah během trénování modelu.

Co je TensorFlow Architecture

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.

Příklad TensorFlow
Příklad TensorFlow

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.

Výpočty fungují v TensorFlow

Příklad TensorFlow

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:

  1. Definujte proměnnou
X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")
  1. Definujte výpočet
multiply = tf.multiply(X_1, X_2, name = "multiply")
  1. 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:

  1. Vytvořte data
import numpy as np
x_input = np.random.sample((1,2))
print(x_input)
  1. Vytvořte zástupný symbol
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
  1. Definujte metodu datové sady
dataset = tf.data.Dataset.from_tensor_slices(x)
  1. Vytvořte potrubí
iterator = dataset.make_initializable_iterator()
get_next = iterator.get_next()
  1. Spusťte program
with tf.Session() as sess:
    sess.run(iterator.initializer, feed_dict={x: x_input})
    print(sess.run(get_next))

Nejčastější dotazy

Soubor tf.placeholder patří do TensorFlow 1.x a byl odstraněn ve verzi 2.0, která se spouští energicky a nepotřebuje žádné zástupné symboly. Předávejte hodnoty přímo nebo použijte tf.compat.v1 pro spuštění starších skriptů beze změny.

Tenzor je n-rozměrné pole, kde každý prvek sdílí jeden datový typ. Skalár má hodnost 0, vektor hodnost 1, matice hodnost 2 a dávka obrázků má obvykle hodnost 4.

Keras je API na vysoké úrovni pro definování a trénování modelů, zatímco TensorFlow je základní výpočetní engine. Od verze 2.16 TensorFlow dodává Keras 3, který lze spustit i na JAX nebo Py.Torch.

TensorFlow je vhodný pro produkční umělou inteligenci: klasifikaci obrázků, zpracování přirozeného jazyka, doporučovací systémy a jakýkoli model, který musí být nasazen na mobilní zařízení, do prohlížeče nebo obslužného clusteru.

Ano. Asistenti umělé inteligence mohou přepsat kód relace a zástupného symbolu na ekvivalenty Eager a označit funkce s odstraněnými příznaky. Před odstraněním starého skriptu numericky ověřte výstup oproti originálu.

Shrňte tento příspěvek takto: