Započnimo ovaj vodič s uvodom u TensorFlow:
Što je TensorFlow?
TensorFlow je open-source end-to-end platforma za stvaranje aplikacija za strojno učenje. To je simbolična matematička knjižnica koja koristi protok podataka i različito programiranje za obavljanje različitih zadataka usredotočenih na obuku i zaključivanje dubokih neuronskih mreža. Omogućuje programerima da izrađuju aplikacije za strojno učenje pomoću različitih alata, knjižnica i resursa zajednice.
Trenutno je najpoznatija svjetska knjižnica dubokog učenja Googleov TensorFlow. Googleov proizvod koristi strojno učenje u svim svojim proizvodima kako bi poboljšao tražilicu, prijevod, titlove slika ili preporuke.
Dajući konkretan primjer, Googleovi korisnici mogu iskusiti brže i profinjenije pretraživanje pomoću AI. Ako korisnik upiše ključnu riječ u traku za pretraživanje, Google daje preporuku o tome što bi mogla biti sljedeća riječ.
Google želi koristiti strojno učenje kako bi iskoristio prednosti svojih masovnih skupova podataka kako bi korisnicima pružio najbolje iskustvo. Tri različite skupine koriste se strojnim učenjem:
- Istraživači
- Znanstvenici podataka
- Programeri.
Svi oni mogu koristiti isti set alata za međusobnu suradnju i poboljšanje svoje učinkovitosti.
Google nema samo podatke; imaju najmasovnije računalo na svijetu, pa je Tensor Flow napravljen u mjerilima. TensorFlow je knjižnica koju je razvio Googleov tim za mozak kako bi ubrzao strojno učenje i istraživanje dubokih neuronskih mreža.
Izgrađen je za rad na više CPU-a ili GPU-a, pa čak i mobilnim operativnim sustavima, a ima nekoliko omota na nekoliko jezika poput Pythona, C ++ ili Java.
U ovom vodiču za TensorFlow naučit ćete
- Što je TensorFlow?
- Povijest TensorFlowa
- Kako djeluje TensorFlow
- Arhitektura TensorFlow
- Gdje Tensorflow može raditi?
- Uvod u komponente TensorFlowa
- Zašto je TensorFlow popularan?
- Popis istaknutih algoritama koje podržava TensorFlow
- Primjer jednostavnog TensorFlowa
- Opcije za učitavanje podataka u TensorFlow
- Stvorite Tensorflow cjevovod
Povijest TensorFlowa
Prije nekoliko godina, duboko učenje počelo je nadmašivati sve ostale algoritme strojnog učenja kada je davalo veliku količinu podataka. Google je vidio da bi mogao koristiti ove duboke neuronske mreže za poboljšanje svojih usluga:
- Gmail
- Fotografija
- Google tražilica
Oni grade okvir nazvan Tensorflow kako bi istraživačima i programerima omogućili da zajedno rade na AI modelu. Jednom razvijen i skaliran, omogućuje velikom broju ljudi da ga koristi.
Prvi je put objavljen krajem 2015. godine, dok se prva stabilna verzija pojavila 2017. Otvoreni je izvor pod licencom Apache Open Source. Možete ga koristiti, modificirati i distribuirati modificiranu verziju uz naknadu, a da ništa ne platite Googleu.
Dalje u ovom vodiču za duboko učenje TensorFlowa naučit ćemo o arhitekturi TensorFlow i kako funkcionira TensorFlow.
Kako djeluje TensorFlow
TensorFlow omogućuje vam izgradnju grafova i struktura protoka podataka kako biste definirali kako se podaci kreću kroz graf uzimajući ulaze kao višedimenzionalni niz zvan Tensor. Omogućuje vam izgradnju dijagrama toka operacija koji se može izvesti na tim ulazima, a koji ide na jedan, a na drugi kraj kao izlaz.
Arhitektura TensorFlow
Arhitektura Tensorflow djeluje u tri dijela:
- Predobrada podataka
- Izgradite model
- Obučiti i procijeniti model
Zove se Tensorflow jer uzima ulaz kao višedimenzionalni niz, poznat i kao tenzori . Možete stvoriti neku vrstu dijagrama toka operacija (koji se naziva Graf) koji želite izvršiti na tom ulazu. Ulaz ulazi na jednom kraju, a zatim prolazi kroz ovaj sustav višestrukih operacija i izlazi na drugi kraj kao izlaz.
Zbog toga se naziva TensorFlow jer tenzor ulazi u njega teče kroz popis operacija, a zatim izlazi s druge strane.
Gdje Tensorflow može raditi?
TensorFlow hardverski i softverski zahtjevi mogu se klasificirati u
Faza razvoja: Tada trenirate način rada. Trening se obično izvodi na radnoj površini ili prijenosnom računalu.
Pokreni fazu ili fazu zaključivanja: Kada se trening završi, Tensorflow se može pokretati na mnogo različitih platformi. Možete ga pokrenuti
- Desktop sa sustavom Windows, macOS ili Linux
- Cloud kao web usluga
- Mobilni uređaji poput iOS-a i Androida
Možete ga trenirati na više strojeva, a zatim ga možete pokretati na drugom stroju, nakon što dobijete istrenirani model.
Model se može obučiti i koristiti na GPU-ima kao i CPU-ima. GPU-ovi su u početku bili dizajnirani za video igre. Krajem 2010. godine istraživači Stanforda otkrili su da je GPU također vrlo dobar u radu s matricama i algebri, tako da ih čini vrlo brzim za obavljanje takvih vrsta izračuna. Dubinsko učenje oslanja se na množenje matrica. TensorFlow je vrlo brz u izračunavanju množenja matrica jer je napisan na C ++. Iako je implementiran u C ++, TensorFlowu mogu pristupiti i kontrolirati ga uglavnom drugi jezici, Python.
Napokon, značajna značajka TensorFlow-a je TensorBoard. TensorBoard omogućuje grafičko i vizualno praćenje onoga što TensorFlow radi.
Uvod u komponente TensorFlowa
Tenzor
Ime Tensorflowa izravno je izvedeno iz njegovog temeljnog okvira: Tensor . U Tensorflow-u sva izračunavanja uključuju tenzore. Tenzor je vektor ili matrica n-dimenzija koja predstavlja sve vrste podataka. Sve vrijednosti u tenzoru sadrže identičan tip podataka s poznatim (ili djelomično poznatim) oblikom . Oblik podataka je dimenzionalnost matrice ili niza.
Tenzor može nastati iz ulaznih podataka ili rezultata izračuna. U TensorFlowu sve se operacije izvode unutar grafikona . Graf je skup izračuna koji se odvija sukcesivno. Svaka se operacija naziva op čvor i međusobno su povezane.
Grafikon opisuje operacije i veze između čvorova. Međutim, ne prikazuje vrijednosti. Rub čvorova je tenzor, tj. Način za popunjavanje operacije podacima.
Grafikoni
TensorFlow koristi okvir grafa. Grafikon prikuplja i opisuje sve serijske izračune izvršene tijekom treninga. Grafikon ima puno prednosti:
- Učinjeno je za pokretanje na više CPU-a ili GPU-a, pa čak i na mobilnom operativnom sustavu
- Prenosivost grafa omogućuje očuvanje izračuna za neposrednu ili kasniju upotrebu. Grafikon se može spremiti za izvršenje u budućnosti.
- Sva izračunavanja na grafikonu izvode se povezivanjem tenzora
- Tenzor ima čvor i rub. Čvor nosi matematičku operaciju i proizvodi izlaze krajnjih točaka. Rubovi rubova objašnjavaju ulazno / izlazne odnose između čvorova.
Zašto je TensorFlow popularan?
TensorFlow je najbolja knjižnica od svih jer je stvorena da bude dostupna svima. Biblioteka Tensorflow uključuje različite API-je za izgrađenu arhitekturu dubokog učenja poput CNN-a ili RNN-a. TensorFlow se temelji na izračunavanju grafova; omogućuje programeru da vizualizira izgradnju neuronske mreže s Tensorboadom. Ovaj je alat koristan za otklanjanje pogrešaka u programu. Konačno, Tensorflow je izgrađen za primjenu u širokom opsegu. Radi na CPU i GPU.
Tensorflow privlači najveću popularnost na GitHubu u usporedbi s drugim okvirima dubokog učenja.
Popis istaknutih algoritama koje podržava TensorFlow
Ispod je popis podržanih algoritama TensorFlow:
Trenutno TensorFlow 1.10 ima ugrađeni API za:
- Linearna regresija: tf.estimator.LinearRegressor
- Klasifikacija: tf.estimator.LinearClassifier
- Klasifikacija dubokog učenja: tf.estimator.DNNClassifier
- Dubinsko brisanje i dubinsko učenje: tf.estimator.DNNLinearCombinedClassifier
- Pojačana regresija stabla: tf.estimator.BoostedTreesRegressor
- Klasifikacija pojačanog stabla: tf.estimator.BoostedTreesClassifier
Primjer jednostavnog TensorFlowa
import numpy as npimport tensorflow as tf
U prva dva retka koda uvezli smo tensorflow kao tf. S Pythonom je uobičajena praksa koristiti kratko ime za knjižnicu. Prednost je izbjegavanje upisivanja punog naziva knjižnice kada je trebamo koristiti. Na primjer, tensorflow možemo uvesti kao tf i pozvati tf kada želimo koristiti funkciju tensorflow
Vježbajmo osnovni tijek rada Tensorflow-a s jednostavnim primjerima TensorFlow-a. Stvorimo računski graf koji množi dva broja zajedno.
Tijekom primjera pomnožit ćemo X_1 i X_2 zajedno. Tensorflow će stvoriti čvor za povezivanje operacije. U našem primjeru naziva se množenje. Kada se utvrdi graf, računalni motori Tensorflow množit će se zajedno X_1 i X_2.
Primjer TensorFlow
Na kraju ćemo pokrenuti sesiju TensorFlow koja će pokrenuti računski graf s vrijednostima X_1 i X_2 i ispisati rezultat množenja.
Definirajmo ulazne čvorove X_1 i X_2. Kada stvaramo čvor u Tensorflowu, moramo odabrati kakav čvor ćemo stvoriti. Čvorovi X1 i X2 bit će čvor rezerviranog mjesta. Rezervirano mjesto dodjeljuje novu vrijednost svaki put kad napravimo izračun. Stvorit ćemo ih kao čvor rezerviranog mjesta TF točke.
Korak 1: Definirajte varijablu
X_1 = tf.placeholder(tf.float32, name = "X_1")X_2 = tf.placeholder(tf.float32, name = "X_2")
Kada kreiramo čvor rezerviranog mjesta, moramo predati da će vrsta podataka ovdje dodavati brojeve kako bismo mogli koristiti tip podataka s pomičnom zarezom, upotrijebimo tf.float32. Također moramo dati naziv ovom čvoru. Ovo će se ime pojaviti kada pogledamo grafičke vizualizacije našeg modela. Nazovimo ovaj čvor X_1 dodavanjem parametra nazvanog name s vrijednošću X_1, a sada definirajmo X_2 na isti način. X_2.
Korak 2: Definirajte izračunavanje
multiply = tf.multiply(X_1, X_2, name = "multiply")
Sada možemo definirati čvor koji vrši operaciju množenja. U Tensorflowu to možemo učiniti stvaranjem tf.multiply čvora.
Proći ćemo u čvorove X_1 i X_2 u čvor množenja. Tensorflowu govori da poveže te čvorove u računskom grafu, pa tražimo da povuče vrijednosti iz x i y i pomnoži rezultat. Dajmo također čvoru za množenje naziv multiply. To je cijela definicija našeg jednostavnog računskog grafa.
Korak 3: Izvršite operaciju
Da bismo izvršili operacije na grafikonu, moramo stvoriti sesiju. U Tensorflowu to čini tf.Session (). Sad kad imamo sesiju, možemo zatražiti da sesija pokrene operacije na našem računskom grafu pozivanjem sesije. Da bismo pokrenuli proračun, trebamo koristiti run.
Kada se izvrši operacija zbrajanja, vidjet će da treba zgrabiti vrijednosti čvorova X_1 i X_2, tako da također trebamo unijeti vrijednosti za X_1 i X_2. To možemo učiniti davanjem parametra koji se naziva feed_dict. Prolazimo vrijednost 1,2,3 za X_1 i 4,5,6 za X_2.
Rezultate ispisujemo ispisom (rezultat). Trebali bismo vidjeti 4, 10 i 18 za 1x4, 2x5 i 3x6
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.]
Opcije za učitavanje podataka u TensorFlow
Prvi korak prije treninga algoritma strojnog učenja je učitavanje podataka. Postoje dva uobičajena načina učitavanja podataka:
1. Učitavanje podataka u memoriju: To je najjednostavnija metoda. Sve podatke učitavate u memoriju kao jedan niz. Možete napisati Python kod. Ovi retci koda nisu povezani s Tensorflowom.
2. Cjevovod podataka za protok podataka. Tensorflow ima ugrađeni API koji vam pomaže da lako učitate podatke, izvodite operaciju i hranite algoritam strojnog učenja. Ova metoda djeluje vrlo dobro, posebno ako imate velik skup podataka. Na primjer, poznato je da su zapisi slika ogromni i ne uklapaju se u memoriju. Cjevovod podataka sam upravlja memorijom
Koje rješenje koristiti?
Učitajte podatke u memoriju
Ako vaš skup podataka nije prevelik, odnosno manji od 10 gigabajta, možete koristiti prvu metodu. Podaci se mogu uklopiti u memoriju. Za uvoz CSV datoteka možete koristiti poznatu biblioteku Pandas. Više o pandama naučit ćete u sljedećem vodiču.
Učitajte podatke cjevovodom Tensorflow
Druga metoda najbolje funkcionira ako imate velik skup podataka. Na primjer, ako imate skup podataka od 50 gigabajta, a vaše računalo ima samo 16 gigabajta memorije, stroj će se srušiti.
U ovoj situaciji trebate izgraditi Tensorflow cjevovod. Cjevovod će učitati podatke u šarži ili u manjem komadu. Svaka serija bit će gurnuta u cjevovod i bit će spremna za obuku. Izgradnja cjevovoda izvrsno je rješenje jer vam omogućuje upotrebu paralelnog računanja. To znači da će Tensorflow trenirati model na više procesora. Pospješuje proračun i dozvole za obuku moćne neuronske mreže.
Vidjet ćete u sljedećim vodičima o tome kako izgraditi značajan cjevovod za napajanje vaše neuronske mreže.
Ukratko, ako imate mali skup podataka, podatke možete učitati u memoriju Pandas knjižnicom.
Ako imate velik skup podataka i želite koristiti više procesora, bit će vam ugodnije raditi s Tensorflow cjevovodom.
Stvorite Tensorflow cjevovod
U prethodnom primjeru ručno dodajemo tri vrijednosti za X_1 i X_2. Sada ćemo vidjeti kako učitati podatke u Tensorflow.
Korak 1) Stvorite podatke
Prije svega, upotrijebimo numpy knjižnicu za generiranje dvije slučajne vrijednosti.
import numpy as npx_input = np.random.sample((1,2))print(x_input)
[[0,8835775 0,23766977]]
Korak 2) Izradite rezervirano mjesto
Kao u prethodnom primjeru, kreiramo rezervirano mjesto s imenom X. Moramo eksplicitno navesti oblik tenzora. U slučaju da ćemo učitati niz sa samo dvije vrijednosti. Oblik možemo zapisati kao shape = [1,2]
# using a placeholderx = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
Korak 3) Definirajte metodu skupa podataka
Dalje, moramo definirati Skup podataka gdje možemo popuniti vrijednost rezerviranog mjesta x. Moramo koristiti metodu tf.data.Dataset.from_tensor_slices
dataset = tf.data.Dataset.from_tensor_slices(x)
Korak 4) Stvorite cjevovod
U četvrtom koraku moramo inicijalizirati cjevovod kamo će podaci prolaziti. Moramo stvoriti iterator s make_initializable_iterator. Nazvali smo ga iterator. Zatim trebamo nazvati ovaj iterator za unos sljedeće serije podataka, get_next. Ovaj korak imenujemo get_next. Imajte na umu da u našem primjeru postoji samo jedna skupina podataka sa samo dvije vrijednosti.
iterator = dataset.make_initializable_iterator()get_next = iterator.get_next()
Korak 5) Izvršite operaciju
Posljednji je korak sličan prethodnom primjeru. Pokrećemo sesiju i pokrećemo iterator operacije. Feed_dict hranimo vrijednošću koju generira numpy. Ove dvije vrijednosti popunit će rezervirano mjesto x. Zatim pokrećemo get_next za ispis rezultata.
with tf.Session() as sess:# feed the placeholder with datasess.run(iterator.initializer, feed_dict={ x: x_input })print(sess.run(get_next)) # output [ 0.52374458 0.71968478]
[0.8835775 0.23766978]
Sažetak
Značenje TensorFlow: TensorFlow je najpoznatija knjižnica dubokog učenja ovih posljednjih godina. Praktičar koji koristi TensorFlow može izgraditi bilo koju strukturu dubokog učenja, poput CNN-a, RNN-a ili jednostavne umjetne neuronske mreže.
TensorFlow uglavnom koriste akademici, startupi i velike tvrtke. Google koristi TensorFlow u gotovo svim Googleovim svakodnevnim proizvodima, uključujući Gmail, Photo i Google Search Engine.
Google Brain tim razvio je TensorFlow kako bi popunio prazninu između istraživača i programera proizvoda. 2015. godine javno su objavili TensorFlow; brzo raste u popularnosti. Danas je TensorFlow knjižnica dubokog učenja s najviše spremišta na GitHubu.
Praktičari koriste Tensorflow jer je jednostavan za primjenu u velikoj mjeri. Izgrađen je za rad u oblaku ili na mobilnim uređajima poput iO-a i Androida.
Tensorflow radi u sesiji. Svaka sesija definirana je grafom s različitim proračunima. Jednostavan primjer može biti množenje u broj. U programu Tensorflow potrebna su tri koraka:
- Definirajte varijablu
X_1 = tf.placeholder(tf.float32, name = "X_1")X_2 = tf.placeholder(tf.float32, name = "X_2")
- Definirajte proračun
multiply = tf.multiply(X_1, X_2, name = "multiply")
- Izvršite operaciju
with tf.Session() as session:result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})print(result)
Jedna uobičajena praksa u Tensorflowu je stvaranje cjevovoda za učitavanje podataka. Ako slijedite ovih pet koraka, moći ćete učitati podatke u TensorFLow
- Stvorite podatke
import numpy as npx_input = np.random.sample((1,2))print(x_input)
- Izradite rezervirano mjesto
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
- Definirajte metodu skupa podataka
dataset = tf.data.Dataset.from_tensor_slices(x)
- Stvorite cjevovod
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
- Izvršite program
with tf.Session() as sess:sess.run(iterator.initializer, feed_dict={ x: x_input })print(sess.run(get_next))