Znanost o podacima

Vodič za Python Tensorflow

Vodič za Python Tensorflow
U ovoj ćemo lekciji pogledati TensorFlow, biblioteku strojnog učenja otvorenog koda koja se koristi za dizajniranje, izgradnju i obuku modela dubokog učenja. Moguće je izvršiti numeričke proračune s bibliotekom TensorFlow koji grafikoni protoka podataka u kojima su matematičke operacije predstavljene kao čvorovi, a podaci su predstavljeni kao rubovi između tih čvorova.

Sveukupno ćemo u ovoj lekciji pokriti tri glavne teme:

  1. Što su tenzori i TensorFlow
  2. Primjena ML algoritama s TensorFlowom
  3. Slučajevi upotrebe TensorFlow

TensorFlow je izvrstan Googleov paket Python koji dobro koristi paradigmu programiranja toka podataka za visoko optimizirane matematičke proračune. Neke značajke TensorFlow-a su:

Zbog svih ovih značajki i raspona algoritama strojnog učenja, koje TensorFlow primjenjuje, čini ga bibliotekom proizvodnih razmjera. Zaronimo u koncepte u TensorFlowu kako bismo odmah nakon toga mogli zaprljati ruke kodom.

Instaliranje TensorFlow-a

Kako ćemo koristiti Python API za TensorFlow, dobro je znati da radi s oba Pythona 2.7 i 3.3+ verzije. Instalirajmo knjižnicu TensorFlow prije nego što prijeđemo na stvarne primjere i koncepte. Postoje dva načina za instalaciju ovog paketa. Prva uključuje upotrebu upravitelja paketa Python, pip:

pip instalirati tensorflow

Drugi se način odnosi na Anacondu, paket možemo instalirati kao:

conda install -c conda-forge tensorflow

Slobodno potražite noćne verzije i verzije GPU-a na službenim stranicama za instalaciju TensorFlowa.

Za sve primjere u ovoj lekciji koristit ću upravitelja Anaconde. Pokrenut ću Jupyter bilježnicu za isti:

Sad kad smo spremni sa svim naredbama za uvoz napisati neki kôd, krenimo s ronjenjem u SciPy paket s nekoliko praktičnih primjera.

Što su tenzori?

Tenzori su osnovne strukture podataka koje se koriste u programu Tensorflow. Da, oni su samo način za predstavljanje podataka u dubokom učenju. Zamislimo ih ovdje:

Kao što je opisano na slici, tenzori se mogu nazvati n-dimenzionalnim nizom što nam omogućuje prikaz podataka u složenim dimenzijama. Svaku dimenziju možemo smatrati različitim obilježjem podataka u dubokom učenju. To znači da tenzori mogu postati prilično složeni kada je riječ o složenim skupovima podataka s puno značajki.

Jednom kad znamo što su tenzori, mislim da je prilično lako izvesti ono što se događa u TensorFlowu. Ti pojmovi znače kako tenzori ili značajke mogu teći u skupovima podataka kako bi proizveli vrijedne rezultate dok na njima radimo razne operacije.

Razumijevanje TensorFlow-a s konstantama

Baš kao što smo pročitali gore, TensorFlow nam omogućuje izvođenje algoritama strojnog učenja na Tensorima kako bismo proizveli vrijedne rezultate. Uz TensorFlow, dizajniranje i obuka modela dubokog učenja je izravno naprijed.

TensorFlow dolazi s gradnjom Računski grafovi. Grafikoni izračuna su grafovi protoka podataka u kojima su matematičke operacije predstavljene kao čvorovi, a podaci su predstavljeni kao bridovi između tih čvorova. Napišimo vrlo jednostavan isječak koda kako bismo pružili konkretnu vizualizaciju:

uvoz tensorflow kao tf
x = tf.konstantan (5)
y = tf.konstanta (6)
z = x * y
ispis (z)

Kada pokrenemo ovaj primjer, vidjet ćemo sljedeći izlaz:

Zašto je množenje pogrešno? To nije bilo ono što smo očekivali. To se dogodilo jer tako ne možemo izvoditi operacije s TensorFlowom. Prvo, moramo pokrenuti a sjednica kako bi proračunski graf radio,

Sa Sessionsima možemo inkapsulirati kontrola rada i stanja tenzora. To znači da sesija može pohraniti i rezultat računskog grafa tako da taj rezultat može proslijediti sljedećoj operaciji redoslijedom izvođenja cjevovoda. Stvorimo sesiju sada da bismo dobili točan rezultat:

# Započnite s objektom sesije
sjednica = tf.Sjednica()
# Osigurajte izračun za sesiju i pohranite ga
rezultat = sesija.trčanje (z)
# Ispis rezultata izračuna
ispis (rezultat)
# Zatvori sesiju
sjednica.Zatvoriti()

Ovaj smo put dobili sesiju i pružili joj izračun potreban za pokretanje na čvorovima. Kada pokrenemo ovaj primjer, vidjet ćemo sljedeći izlaz:

Iako smo dobili upozorenje od TensorFlowa, ipak smo dobili točan izlaz iz izračuna.

Operacije tenzora s jednim elementom

Baš kao što smo pomnožili dva konstantna tenzora u prošlom primjeru, tako i u TensorFlowu imamo mnogo drugih operacija koje se mogu izvesti na pojedinačnim elementima:

Operacije s jednim elementom znače da će se čak i kada navedete niz izvršiti na svakom elementu tog polja. Na primjer:

uvoz tensorflow kao tf
uvoz numpy kao np
tenzor = np.niz ([2, 5, 8])
tenzor = tf.convert_to_tensor (tenzor, dtype = tf.float64)
s tf.Sesija () kao sesija:
ispis (sesija.trčanje (tf.cos (tenzor)))

Kada pokrenemo ovaj primjer, vidjet ćemo sljedeći izlaz:

Ovdje smo razumjeli dva važna pojma:

  1. Bilo koji NumPy niz može se lako pretvoriti u tenzor uz pomoć convert_to_tensor funkcije
  2. Operacija je izvedena na svakom elementu niza NumPy

Rezervisari i varijable

U jednom od prethodnih odjeljaka pogledali smo kako možemo koristiti konstante Tensorflowa za izračun računskih grafova. Ali TensorFlow nam također omogućuje da unosimo podatke u pokretu kako bi grafikon izračuna mogao biti dinamičan. To je moguće uz pomoć rezerviranih mjesta i varijabli.

U stvari, rezervirani dijelovi ne sadrže nikakve podatke i moraju imati valjane unose tijekom izvođenja, a kako se očekuje, bez unosa generirat će pogrešku.

Rezervirano mjesto može se nazvati dogovorom na grafikonu koji će sigurno pružiti ulaz tijekom izvođenja. Evo primjera rezerviranih mjesta:

uvoz tensorflow kao tf
# Dva rezervirana mjesta
x = tf. rezervirano mjesto (tf.float32)
y = tf. rezervirano mjesto (tf.float32)
# Dodjeljivanje operacije množenja w.r.t. a & b za čvor mul
z = x * y
# Stvorite sesiju
sjednica = tf.Sjednica()
# Propusne vrijednosti za placehollders
rezultat = sesija.trčanje (z, x: [2, 5], y: [3, 7])
ispis ('Množenje x i y:', rezultat)

Kada pokrenemo ovaj primjer, vidjet ćemo sljedeći izlaz:

Sad kad imamo znanje o rezerviranim mjestima, okrenimo pogled prema varijablama. Znamo da se izlaz jednadžbe s vremenom može promijeniti za isti skup ulaza. Dakle, kada treniramo svoju varijablu modela, ona s vremenom može promijeniti svoje ponašanje. U ovom scenariju, varijabla nam omogućuje dodavanje ovih parametara koji se mogu obučiti u naš računski graf. Varijabla se može definirati kako slijedi:

x = tf.Promjenjiva ([5.2], dtype = tf.float32)

U gornjoj jednadžbi x je varijabla kojoj se daju početna vrijednost i tip podataka. Ako ne dostavimo tip podataka, TensorFlow će odrediti njegovu početnu vrijednost. Ovdje pogledajte vrste podataka TensorFlow.

Za razliku od konstante, moramo pozvati Python funkciju da inicijaliziramo sve varijable grafa:

init = tf.global_variables_initializer ()
sjednica.trčanje (init)

Obavezno pokrenite gornju funkciju TensorFlow prije nego što upotrijebimo naš graf.

Linearna regresija s TensorFlowom

Linearna regresija jedan je od najčešćih algoritama koji se koristi za uspostavljanje odnosa u danim kontinuiranim podacima. Taj odnos između koordinatnih točaka, recimo x i y, naziva se a hipoteza. Kada govorimo o Linearnoj regresiji, hipoteza je ravna crta:

y = mx + c

Ovdje je m nagib crte, a ovdje je vektor koji predstavlja utezi. c je konstantni koeficijent (presjek y) i ovdje predstavlja Pristranost. Težina i pristranost nazivaju se parametri modela.

Linearne regresije omogućuju nam da procijenimo vrijednosti težine i pristranosti tako da imamo minimum funkcija troškova. Konačno, x je neovisna varijabla u jednadžbi, a y ovisna varijabla. Počnimo sada graditi linearni model u TensorFlowu s jednostavnim isječkom koda koji ćemo objasniti:

uvoz tensorflow kao tf
# Varijable za nagib parametra (W) s početnom vrijednošću 1.1
W = tf.Promjenjiva ([1.1], tf.float32)
# Varijabla za pristranost (b) s početnom vrijednosti -1.1
b = tf.Promjenjiva ([- 1.1], tf.float32)
# Rezervisari za pružanje ulaznih podataka ili neovisne varijable, označeni sa x
x = tf.rezervirano mjesto (tf.float32)
# Jednadžba crte ili linearna regresija
linearni_model = Š * x + b
# Inicijalizacija svih varijabli
sjednica = tf.Sjednica()
init = tf.global_variables_initializer ()
sjednica.trčanje (init)
# Izvršiti regresijski model
ispis (sesija.trčanje (linearni_model x: [2, 5, 7, 9])))

Evo, učinili smo upravo ono što smo ranije objasnili, sažeti ovdje:

Kada pokrenemo ovaj primjer, vidjet ćemo sljedeći izlaz:

Jednostavni isječak koda samo pruža osnovnu ideju o tome kako možemo izgraditi regresijski model. Ali još uvijek trebamo napraviti još nekoliko koraka kako bismo dovršili model koji smo izgradili:

Funkcija gubitka i provjera valjanosti modela

Da bismo potvrdili model, moramo imati mjeru kolika je odstupanja trenutne izlazne snage od očekivane. Postoje razne funkcije gubitaka koje se ovdje mogu koristiti za provjeru valjanosti, ali mi ćemo pogledati jednu od najčešćih metoda, Zbroj kvadrata pogreške ili SSE.

Jednadžba za SSE daje se kao:

E = 1/2 * (t - y) 2

Ovdje:

Sada napišimo isječak koda kontinuirano do posljednjeg isječka kako bi odražavao vrijednost gubitka:

y = tf.rezervirano mjesto (tf.float32)
pogreška = linearni_model - god
kvadratne_pogreške = tf.kvadrat (pogreška)
gubitak = tf.smanjiti_sum (kvadratne_pogreške)
ispis (sesija.trčanje (gubitak, x: [2, 5, 7, 9], y: [2, 4, 6, 8]))

Kada pokrenemo ovaj primjer, vidjet ćemo sljedeći izlaz:

Jasno je da je vrijednost gubitka vrlo niska za zadani model linearne regresije.

Zaključak

U ovoj smo lekciji pogledali jedan od najpopularnijih paketa dubokog učenja i strojnog učenja, TensorFlow. Također smo napravili model linearne regresije koji je imao vrlo visoku točnost.

Kako prikazati brojač FPS-a u Linux igrama
Linux gaming dobio je velik poticaj kada je Valve najavio Linux podršku za Steam klijent i njihove igre 2012. godine. Od tada su mnoge AAA i indie igr...
Kako preuzeti i igrati Sid Meier's Civilization VI na Linuxu
Uvod u igru Civilization 6 moderan je pogled na klasični koncept predstavljen u seriji igara Age of Empires. Ideja je bila prilično jednostavna; započ...
Kako instalirati i igrati Doom na Linuxu
Uvod u Doom Serija Doom nastala je 90-ih nakon izlaska originalnog Dooma. To je bio trenutni hit i od tog vremena nadalje igraća serija dobila je broj...