Vodič za TensorFlow - Dubinsko učenje pomoću TensorFlow-a



Vodič za TensorFlow treći je blog u nizu. Uključuje sve osnove TensorFlowa. Također govori o tome kako stvoriti jednostavan linearni model.

Dizajnirao sam ovaj vodič za TensorFlow za profesionalce i entuzijaste koji su zainteresirani za primjenu algoritma dubinskog učenja pomoću TensorFlowa za rješavanje različitih problema. TensorFlow je biblioteka za duboko učenje otvorenog koda koja se temelji na konceptu grafikona protoka podataka za izgradnju modela. Omogućuje vam stvaranje neuronskih mreža velikih razmjera s mnogo slojeva.Učenje korištenja ove knjižnice također je temeljni dio .Slijede teme o kojima će se raspravljati u ovom blogu tutorijala za TensorFlow:

  • Što je TensorFlow
  • Osnove koda TensorFlow
  • TensorFlow UseCase

Što su tenzori?

U ovom vodiču za TensorFlow, prije nego što razgovaramo o TensorFlowu, prvo shvatimo što su tenzori . Tenzori nisu ništa drugo do de facto za predstavljanje podataka u dubokom učenju.





Tenzori - TensorFlow Tutorial - EdurekaKao što je prikazano na gornjoj slici, tenzori su samo višedimenzionalni nizovi, što vam omogućuje predstavljanje podataka većih dimenzija. Općenito, Deep Learning se bavi visokodimenzionalnim skupovima podataka gdje se dimenzije odnose na različite značajke prisutne u skupu podataka. Zapravo, naziv 'TensorFlow' izveden je iz operacija koje neuronske mreže izvode na tenzorima. To je doslovno tok tenzora. Budući da ste razumjeli što su tenzori, krenimo dalje u ovom vodiču za TensorFlow i shvatimo - što je TensorFlow?

Što je TensorFlow?

TensorFlow je knjižnica zasnovana na Pythonu koja pruža različite vrste funkcionalnosti za implementaciju modela dubokog učenja. Kao što je ranije spomenuto, pojam TensorFlow sastoji se od dva pojma - Tensor & Flow:



U TensorFlowu pojam tenzor odnosi se na predstavljanje podataka kao višedimenzionalni niz, dok se pojam tok odnosi na niz operacija koje se izvršavaju na tenzorima, kao što je prikazano na gornjoj slici.

zašto bih trebao učiti sql

Sada smo pokrili dovoljno pozadine o TensorFlowu.



Dalje, u ovom vodiču za TensorFlow razgovarat ćemo o osnovama koda TensorFlow.

Vodič za TensorFlow: Osnove koda

U osnovi, cjelokupni postupak pisanja programa TensorFlow uključuje dva koraka:

  1. Izgradnja računalnog grafikona
  2. Pokretanje računalnog grafikona

Dopustite mi da vam objasnim gornja dva koraka jedan po jedan:

1. Izrada računalnog grafikona

Tako, što je računski graf? Pa, računski graf je niz operacija TensorFlow raspoređenih kao čvorovi u grafu. Svaki čvor uzima 0 ili više tenzora kao ulaz i stvara tenzor kao izlaz. Dopustite mi da vam dam primjer jednostavnog računskog grafa koji se sastoji od tri čvora - do , b & c kao što je prikazano niže:

Objašnjenje gornjeg računalnog grafikona:

  • Stalni čvorovikoriste se za pohranu konstantnih vrijednosti jer treba nula ulaza, ali pohranjene vrijednosti stvaraju kao izlaz. U gornjem primjeru, a i b su konstantni čvorovi s vrijednostima 5, odnosno 6.

  • Čvor c predstavlja operaciju množenja konstantnog čvora a s b. Stoga će izvršenje čvora c rezultirati umnožavanjem const čvora a & b.

U osnovi, računski graf može se smatrati alternativnim načinom konceptualizacije matematičkih izračuna koji se odvija u programu TensorFlow. Operacije dodijeljene različitim čvorovima računskog grafa mogu se izvoditi paralelno, čime se pružaju bolje performanse u smislu izračunavanja.

Ovdje samo opisujemo proračun, on ništa ne izračunava, ne sadrži nikakve vrijednosti, već samo definira operacije navedene u vašem kodu.

2. Pokretanje računalnog grafikona

Uzmimo prethodni primjer računskog grafa i shvatimo kako ga izvršiti. Slijedi kôd iz prethodnog primjera:

java algoritmi i strukture podataka

Primjer 1:

uvoz tensorflow kao tf # Izradite graf a = tf.constant (5.0) b = tf.constant (6.0) c = a * b

Sada, da bismo dobili izlaz čvora c, moramo pokrenuti računski graf unutar a sjednica . Sesija postavlja operacije grafikona na uređaje, poput CPU-a ili GPU-a, i pruža metode za njihovo izvršavanje.

Sjednica obuhvaća kontrolu i stanje vremena izvođenja TensorFlow, tj. Pohranjuje informacije o redoslijedu u kojem će se izvoditi sve operacije i prosljeđuje rezultat već izračunate operacije sljedećoj operaciji u cjevovodu. Dopustite mi da vam pokažem kako pokrenuti gornji računski graf unutar sesije (objašnjenje svakog retka koda dodano je kao komentar):

# Stvorite objekt sesije sess = tf.Session () # Pokrenite graf unutar sesije i pohranite izlaz u varijablu output_c = sess.run (c) # Ispišite izlaz čvora c print (output_c) # Zatvorite sesiju u osloboditi neke resurse sess.close ()
 Izlaz: 30

Dakle, ovdje se radilo samo o sesiji i pokretanju računskog grafa u njoj. Sada, razgovarajmo o varijablama i rezerviranim mjestima koja ćemo intenzivno koristiti dok gradimo model dubokog učenja pomoću TensorFlowa.

Konstante, rezervirano mjesto i varijable

U TensorFlow-u konstante, rezervirana mjesta i varijable koriste se za predstavljanje različitih parametara modela dubokog učenja. Budući da sam već razgovarao o konstantama, započet ću s rezerviranim mjestima.

Rezerviranog mjesta:

Konstanta TensorFlow omogućuje vam pohranjivanje vrijednosti, ali što ako želite da vaši čvorovi uzimaju ulaze u pokretu? Za ovu vrstu funkcionalnosti koriste se rezervirana mjesta koja omogućuju vašem grafikonu da uzima vanjske ulaze kao parametre. U osnovi, rezervirano mjesto predstavlja obećanje da će vrijednost pružiti kasnije ili za vrijeme izvođenja. Dopustite mi da vam dam primjer za pojednostavljivanje stvari:

import tensorflow as tf # Stvaranje rezerviranih mjesta a = tf. rezervirano mjesto (tf.float32) b = tf. rezervirano mjesto (tf.float32) # Dodjeljivanje operacije množenja w.r.t. a & ampamp b za čvor mul mul = a * b # Stvaranje objekta sesije sess = tf.Session () # Izvođenje mul-a prosljeđivanjem vrijednosti [1, 3] [2, 4] za a i b output = sess.run ( mul, {a: [1,3], b: [2, 4]}) print ('Množenje ab:', izlaz)
 Izlaz: [2. 12.]

Bodovi koje treba zapamtiti rezervirana mjesta:

  • Rezervisari nisu inicijalizirani i ne sadrže podatke.
  • Treba osigurati ulaze ili izvore rezerviranom mjestu koji se uzimaju u obzir tijekom izvođenja.
  • Izvršavanje rezerviranog mjesta bez unosa generira pogrešku.

Krenimo sada i shvatimo - koje su varijable?

Varijable

U dubokom učenju, rezervirani znakovi se koriste za unos proizvoljnih podataka u vaš model ili grafikon. Osim uzimanja unosa, grafikon također trebate izmijeniti tako da može proizvesti nove izlaze w.r.t. isti ulazi. Za to ćete koristiti varijable. Ukratko, varijabla vam omogućuje da na grafikon dodate takve parametre ili čvor koji se mogu trenirati, tj. Vrijednost se može mijenjati tijekom određenog razdoblja. Varijable se definiraju davanjem njihove početne vrijednosti i vrste kao što je prikazano dolje:

var = tf.Variable ([0,4], dtype = tf.float32)

Bilješka:

  • U slučaju da niste eksplicitno naveli tip podataka, TensorFlow će zaključiti o vrsti konstante / varijable iz inicijalizirane vrijednosti.
  • TensorFlow ima mnoge vlastite vrste podataka poput tf.float32 , tf.int32 itd. Možete ih uputiti na sve ovdje .

Konstante se inicijaliziraju kad pozovete tf.konstantno , a njihova se vrijednost nikada ne može promijeniti. Naprotiv, varijable se ne inicijaliziraju kad pozovete tf.Promjenjivo . Da biste inicijalizirali sve varijable u programu TensorFlow, vi mora izričito pozovite posebnu operaciju kao što je prikazano dolje:

init = tf.global_variables_initializer () sess.run (init)

Uvijek imajte na umu da se varijabla mora inicijalizirati prije nego što se graf koristi prvi put.

Bilješka: Varijable TensorFlow su međuspremnici u memoriji koji sadrže tenzore, ali za razliku od normalnih tenzora koji se pokreću tek kada se izvrši graf i nakon toga se odmah brišu, varijable opstaju u više izvršavanja grafa.

Sad kad smo pokrili dovoljno osnova TensorFlowa, krenimo dalje i shvatimo kako implementirati model linearne regresije pomoću TensorFlowa.

Model linearne regresije pomoću TensorFlow-a

Linearni regresijski model koristi se za predviđanje nepoznate vrijednosti varijable (Zavisna varijabla) iz poznate vrijednosti drugih varijabli (Nezavisna varijabla) koristeći jednadžbu linearne regresije kao što je prikazano dolje:

Stoga za stvaranje linearnog modela trebate:

  1. Ovisna ili izlazna varijabla (Y)
  2. Varijabla nagiba (w)
  3. Y - presretanje ili pristranost (b)
  4. Neovisna ili ulazna varijabla (X)

Dakle, započnimo s izgradnjom linearnog modela koristeći TensorFlow:

Kopirajte kod klikom na donji gumb:

# Izrada varijable za nagib parametra (W) s početnom vrijednošću od 0,4 W = tf.Variable ([. 4], tf.float32) # Stvaranje varijable za pristranost parametra (b) s početnom vrijednošću od -0,4 b = tf.Variable ( [-0,4], tf.float32) # Stvaranje rezerviranih mjesta za pružanje ulaznih ili neovisnih varijabli, označenih s xx = tf.placeholder (tf.float32) # Jednadžba linearne regresije linear_model = W * x + b # Inicijalizacija svih varijabli sess = tf.Session () init = tf.global_variables_initializer () sess.run (init) # Pokretanje regresijskog modela za izračunavanje izlaznog wrt-a do ispisanih vrijednosti x (sess.run (linearni_model {x: [1, 2, 3, 4]}))

Izlaz:

[0. 0,40000001 0,80000007 1,20000005]

Gore navedeni kod samo predstavlja osnovnu ideju provedbe regresijskog modela, tj. Kako slijedite jednadžbu regresione crte kako biste dobili izlaz w.r.t. skup ulaznih vrijednosti. Ali, preostale su još dvije stvari koje se trebaju dodati u ovaj model kako bi postao potpuni regresijski model:

  • Prvo, moramo osigurati mehanizam pomoću kojeg se naš model može automatski trenirati na temelju zadanog skupa ulaza i odgovarajućih izlaza.
  • Druga stvar koja nam treba je provjera valjanosti našeg obučenog modela uspoređivanjem njegovih rezultata sa željenim ili ciljnim izlazom na temelju zadanog skupa x vrijednosti.

Sada da razumijemo kako mogu uključiti gore navedene funkcionalnosti u svoj kod za regresijski model.

Funkcija gubitka - provjera valjanosti modela

Funkcija gubitka mjeri koliko su trenutni izlazi modela udaljeni od željenog ili ciljanog izlaza. Upotrijebit ću najčešće korištenu funkciju gubitka za svoj model linearne regresije koji se naziva Zbroj kvadrata ili SSE. SSE izračunat w.r.t. izlaz modela (predstavlja linearni_model) i željeni ili ciljni izlaz (y) kao:

opis posla administratora linux sustava
y = tf.placeholder (tf.float32) pogreška = linearni_model - y kvadrat_pogreške = tf.square (pogreška) gubitak = tf.reduce_sum (kvadrat_pogreške) print (sess.run (gubitak, {x: [1,2,3,4 ], y: [2, 4, 6, 8]})
 Izlaz: 90,24

Kao što vidite, dobivamo visoku vrijednost gubitka. Stoga moramo prilagoditi težinu (W) i pristranost (b) kako bismo smanjili pogrešku koju primamo.

tf.train API - Obuka modela

TensorFlow pruža optimizatori koji polako mijenjaju svaku varijablu kako bi minimalizirali funkciju gubitka ili pogrešku. Najjednostavniji optimizator je gradijentni spust . Ona modificira svaku varijablu u skladu s veličinom derivata gubitka s obzirom na tu varijablu.

# Stvaranje instance optimizatora spuštanja gradijentnog spuštanja = tf.train.GradientDescentOptimizer (0,01) train = optimizer.minimize (gubitak) za i in range (1000): sess.run (vlak, {x: [1, 2, 3, 4], y: [2, 4, 6, 8]}) print (sess.run ([W, b]))
 Izlaz: [niz ([1.99999964], dtype = float32), niz ([9.86305167e-07], dtype = float32)]

Dakle, ovo je način na koji stvarate linearni model pomoću TensorFlow-a i trenirate ga da biste dobili željeni izlaz.

Sad kad znate za duboko učenje, pogledajte Edureka, pouzdane tvrtke za internetsko učenje s mrežom od više od 250 000 zadovoljnih učenika raširenih širom svijeta. Tečaj Edureka za dubinsko učenje s certifikatom TensorFlow pomaže učenicima da postanu stručnjaci u obuci i optimizaciji osnovnih i konvolucijskih neuronskih mreža koristeći projekte i zadatke u stvarnom vremenu zajedno s konceptima kao što su SoftMax funkcija, Neuronske mreže s automatskim kodiranjem, Ograničeni Boltzmannov stroj (RBM).

Imate pitanje za nas? Molimo spomenite to u odjeljku za komentare i javit ćemo vam se.