Üldiselt käsitleme selles tunnis kolme peamist teemat:
- Mis on Tensorid ja TensorFlow
- ML-algoritmide rakendamine TensorFlow abil
- TensorFlow kasutamise juhtumid
TensorFlow on Google'i suurepärane Pythoni pakett, mis kasutab hästi optimeeritud matemaatiliste arvutuste jaoks andmevoo programmeerimise paradigmat. Mõned TensorFlow funktsioonid on:
- Hajutatud arvutusvõimalus, mis muudab andmete haldamise suurtes komplektides lihtsamaks
- Sügav õppimine ja närvivõrgu tugi on hea
- See haldab keerukaid matemaatilisi struktuure nagu n-mõõtmelised massiivid väga tõhusalt
Kõigi nende funktsioonide ja masinõppealgoritmide valiku tõttu muudab TensorFlow selle tootmistoodanguks. Sukeldume TensorFlow mõistetes, et saaksime oma käed kohe koodiga määrduda.
TensorFlow installimine
Kuna kasutame TensorFlow jaoks Pythoni API-d, on hea teada, et see töötab mõlema Python 2-ga.7 ja 3.3+ versiooni. Installime TensorFlow teegi, enne kui läheme tegelike näidete ja mõistete juurde. Selle paketi installimiseks on kaks võimalust. Esimene hõlmab Pythoni paketihalduri pip kasutamist:
pip installige tensorflowTeine viis on seotud Anacondaga, saame paketi installida järgmiselt:
conda install -c conda-forge tensorflowOtsige julgelt öiseid järkusid ja GPU versioone TensorFlow ametlikelt installimislehtedelt.
Selle õppetunni kõigi näidete jaoks kasutan Anaconda haldurit. Käivitan sama jaoks Jupyteri märkmiku:
Nüüd, kui kõik impordilaused on valmis koodi kirjutama, alustame SciPy paketiga sukeldumist mõne praktilise näite abil.
Mis on tenorid?
Tensorid on Tensorflowis kasutatavad põhiandmete struktuurid. Jah, need on lihtsalt viis andmete esitamiseks sügavas õppes. Kujutleme neid siin:
Nagu pildil kirjeldatud, tenoreid võib nimetada n-mõõtmeliseks massiiviks mis võimaldab meil andmeid esitada keerulistes mõõtmetes. Võime mõelda igast dimensioonist kui andmete erinevast tunnusest süvaõppimisel. See tähendab, et Tensorid võivad paljude funktsioonidega keerukatest andmekogumitest üsna keerukaks kasvada.
Kui teame, mis on Tensors, on minu arvates TensorFlow'is toimuva tuletamine üsna lihtne. Need terminid tähendavad seda, kuidas tenorid või funktsioonid saavad andmekogumites voolata, et toota väärtuslikku väljundit, kui me sellega erinevaid toiminguid teeme.
TensorFlow konstantidega mõistmine
Täpselt nii, nagu me eespool lugesime, võimaldab TensorFlow meil väärtuslike väljundite saamiseks Tensoritel masinõppe algoritme täita. TensorFlow abil on Deep Learning mudelite kujundamine ja koolitamine otsekohene.
TensorFlow on varustatud ehitamisega Arvutusgraafikud. Arvutusgraafikud on andmevoo graafikud, kus matemaatilised toimingud on kujutatud sõlmedena ja andmed servadena nende sõlmede vahel. Kirjutage konkreetse visualiseerimise pakkumiseks väga lihtne koodijupp:
impordi tensorflow tf-nax = tf.konstant (5)
y = tf.konstant (6)
z = x * y
trükk (z)
Selle näite käivitamisel näeme järgmist väljundit:
Miks korrutamine on vale? Seda me ei oodanud. See juhtus seetõttu, et nii ei saa me TensorFlow'ga toiminguid teha. Esiteks peame alustama a seanss arvutusgraafiku tööle saamiseks,
Sessionsi abil saame kapselduma tensorite tegevuse ja seisundi kontroll. See tähendab, et seanss saab salvestada ka arvutusgraafiku tulemuse, nii et see saaks selle tulemuse edasi anda torujuhtmete täitmise järjekorras. Õige tulemuse saamiseks loome nüüd seansi:
# Alustage seansiobjektistseanss = tf.Seanss ()
# Esitage arvutus seansile ja salvestage see
tulemus = seanss.jooks (z)
# Prindi arvutamise tulemus
print (tulemus)
# Sule seanss
seanss.Sulge()
Seekord saime seansi ja andsime talle arvutuse, mida see vajab sõlmedes töötamiseks. Selle näite käivitamisel näeme järgmist väljundit:
Kuigi saime TensorFlow'lt hoiatuse, saime arvutusest siiski õige väljundi.
Üheelemendilised tensoritoimingud
Nii nagu viimases näites korrutasime kaks konstantset tensorit, on meil ka TensorFlow'is palju muid toiminguid, mida saab teha üksikute elementidega:
- lisama
- lahutama
- korrutada
- div
- mod
- abs
- negatiivne
- märk
- ruut
- ümmargune
- sqrt
- pow
- exp
- logi
- maksimaalselt
- minimaalselt
- cos
- patt
Ühe elemendiga toimingud tähendavad, et isegi massiivi pakkumisel tehakse toimingud selle massiivi iga elemendiga. Näiteks:
impordi tensorflow tf-naimpordi numpy kui np
tensor = np.massiiv ([2, 5, 8])
tensor = tf.convert_to_tensor (tensor, dtype = tf.float64)
koos tf-ga.Seanss () seansina:
print (seanss.jooksma (tf.cos (tensor)))
Selle näite käivitamisel näeme järgmist väljundit:
Mõistsime siin kahte olulist mõistet:
- Iga NumPy massiivi saab funktsiooni convert_to_tensor abil hõlpsasti teisendada Tensoriks
- Toiming viidi läbi iga massiivi NumPy elemendiga
Kohahoidjad ja muutujad
Ühes eelmises jaotises vaatasime, kuidas saaksime Tensorflow konstantide abil arvutuslikke graafikuid teha. Kuid TensorFlow võimaldab meil ka sisendeid jooksu pealt võtta, et arvutusgraafik oleks oma olemuselt dünaamiline. See on võimalik kohahoidjate ja muutujate abil.
Tegelikult ei sisalda kohatäited andmeid ja neile tuleb esitada käitamise ajal kehtivad sisendid ning ootuspäraselt, ilma sisendita, tekitavad need vea.
Kohatäitjat võib graafikus nimetada kokkuleppeks, et sisend antakse kindlasti käitusajal. Siin on näide kohatäitjatest:
impordi tensorflow tf-na# Kaks kohatäidet
x = tf. kohahoidja (tf.float32)
y = tf. kohahoidja (tf.float32)
# Korrutamisoperatsiooni määramine w.r.t. a & b sõlme mul
z = x * y
# Loo seanss
seanss = tf.Seanss ()
# Edastage paigutuste väärtused
tulemus = seanss.jooks (z, x: [2, 5], y: [3, 7])
print ('x ja y korrutamine:', tulemus)
Selle näite käivitamisel näeme järgmist väljundit:
Nüüd, kui meil on teadmisi kohahoidjate kohta, pöörame pilgu muutujate poole. Me teame, et võrrandi väljund võib sama sisendite komplekti puhul aja jooksul muutuda. Nii et kui me koolitame oma mudeli muutujat, võib see aja jooksul oma käitumist muuta. Selle stsenaariumi korral võimaldab muutuja meil lisada need treenitavad parameetrid meie arvutusgraafikusse. Muutuja saab määratleda järgmiselt:
x = tf.Muutuja ([5.2], dtype = tf.float32)Ülaltoodud võrrandis on x muutuja, mis esitab selle algväärtuse ja andmetüübi. Kui me ei esita andmetüüpi, järeldab TensorFlow selle algväärtusega. Siit leiate TensorFlow andmetüübid.
Erinevalt konstandist peame graafiku kõigi muutujate lähtestamiseks kutsuma Pythoni funktsiooni:
init = tf.global_variables_initializer ()seanss.käima (init)
Enne oma graafiku kasutamist käivitage kindlasti ülaltoodud funktsioon TensorFlow.
Lineaarne regressioon TensorFlow abil
Lineaarne regressioon on üks levinumaid algoritme, mida kasutatakse seose loomiseks antud pidevates andmetes. Seda suhet koordinaatpunktide, näiteks x ja y vahel nimetatakse a-ks hüpotees. Kui räägime lineaarsest regressioonist, on hüpotees sirge:
y = mx + cSiin m on sirge kalle ja siin vektor, mis esindab kaalud. c on konstantkoefitsient (y-lõikepunkt) ja siin tähistab see Eelarvamus. Kaalu ja eelarvamusi nimetatakse mudeli parameetrid.
Lineaarsed regressioonid võimaldavad meil hinnata kaalu ja kallutatuse väärtusi nii, et meil oleks miinimum kulude funktsioon. Lõpuks on x võrrandi sõltumatu muutuja ja y sõltuv muutuja. Alustame nüüd lineaarset mudelit TensorFlow'is lihtsa koodijupiga, mida me selgitame:
impordi tensorflow tf-na# Parameetri kalle (W) muutujad algväärtusega 1.1
W = tf.Muutuja ([1.1], tf.float32)
# Muutuja eelarvamuse (b) jaoks algväärtusega -1.1
b = tf.Muutuja ([- 1.1], tf.float32)
# Sisendi või sõltumatu muutuja esitamise kohatäited, tähistatud tähega x
x = tf.kohahoidja (tf.float32)
# Joone võrrand või lineaarne regressioon
lineaarne_mudel = W * x + b
# Kõigi muutujate lähtestamine
seanss = tf.Seanss ()
init = tf.global_variables_initializer ()
seanss.käima (init)
# Käivita regressioonimudel
print (seanss.run (linear_model x: [2, 5, 7, 9]))
Siin tegime just seda, mida me varem selgitasime, võtame siin kokku:
- Alustasime TensorFlow importimisest oma skripti
- Looge mõned muutujad, mis esindavad vektori kaalu ja parameetrite eelarvamusi
- Sisendi, x tähistamiseks on vaja kohahoidjat
- Esitage lineaarset mudelit
- Initsialiseeri kõik mudeli jaoks vajalikud väärtused
Selle näite käivitamisel näeme järgmist väljundit:
Lihtne koodilõik annab lihtsalt põhiidee selle kohta, kuidas me saame regressioonimudeli üles ehitada. Ehitatud mudeli lõpuleviimiseks peame siiski veel mõned toimingud tegema:
- Peame oma mudeli ise koolitama, et see saaks väljundit anda mis tahes sisendi jaoks
- Peame kinnitama mudeli pakutava väljundi, võrreldes seda antud x eeldatava väljundiga
Kaotuse funktsioon ja mudeli kinnitamine
Mudeli kinnitamiseks peab meil olema mõõt, kuidas praegune väljund on eeldatavast väljundist kõrvale kaldunud. Siin on valideerimiseks erinevaid kadumisfunktsioone, kuid vaatame ühte levinumat meetodit, Ruutvea või SSE summa.
SSE võrrand on esitatud järgmiselt:
E = 1/2 * (t - y) 2Siin:
- E = keskmine ruutviga
- t = vastuvõetud väljund
- y = eeldatav väljund
- t - y = viga
Kirjutagem nüüd koodilõik jätkuks viimasele koodilõigule, et kajastada kaotuse väärtust:
y = tf.kohahoidja (tf.float32)viga = lineaarne_mudel - y
ruudulised vead = tf.ruut (viga)
kaotus = tf.reduc_sum (ruudu_vead)
print (seanss.jooks (kaotus, x: [2, 5, 7, 9], y: [2, 4, 6, 8])
Selle näite käivitamisel näeme järgmist väljundit:
On selge, et kaotuse väärtus on antud lineaarse regressioonimudeli puhul väga madal.
Järeldus
Selles tunnis vaatasime ühte kõige populaarsemat süvaõppe ja masinõppe paketti TensorFlow. Tegime ka lineaarse regressioonimudeli, millel oli väga suur täpsus.