Osnove TensorFlowa: Tensor, Oblik, Tip, Sesije & Operateri

Sadržaj:

Anonim

Što je 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.

U strojnom učenju modeli se hrane s popisom objekata koji se nazivaju vektori značajki. Vektor značajke može biti bilo koje vrste podataka. Vektor obilježja obično će biti primarni ulaz za popunjavanje tenzora. Te će vrijednosti kroz tenzor ući u operativni čvor, a rezultat ove operacije / izračunavanja stvorit će novi tenzor koji će se zauzvrat koristiti u novoj operaciji. Sve ove operacije mogu se vidjeti na grafikonu.

U ovom vodiču naučit ćete osnove TensorFlow-a poput-

  • Što je tenzor?
  • Predstavljanje tenzora
  • Vrste tenzora
  • Stvorite tenzor n-dimenzije
  • Oblik tenzora
  • Vrsta podataka
  • Izrada operatora
  • Neki korisni operateri TensorFlow
  • Varijable
  • Rezerviranog mjesta
  • Sjednica
  • Grafikon

Predstavljanje tenzora

U TensorFlow-u, tenzor je skup vektora značajki (tj. Niza) n-dimenzija. Na primjer, ako imamo matricu 2x3 s vrijednostima od 1 do 6, napišemo:

Predstavljanje tenzora

TensorFlow predstavlja ovu matricu kao:

[[1, 2, 3],[4, 5, 6]] 

Ako stvorimo trodimenzionalnu matricu s vrijednostima od 1 do 8, imamo:

TensorFlow predstavlja ovu matricu kao:

[ [[1, 2],[[3, 4],[[5, 6],[[7,8] ] 

Napomena: Tenzor se može prikazati skalarom ili može imati oblik više od tri dimenzije. Jednostavnije je vizualizirati višu razinu dimenzija.

Vrste tenzora

U TensorFlow-u sva izračunavanja prolaze kroz jedan ili više tenzora. Tf.tensor je objekt s tri svojstva:

  • Jedinstvena oznaka (naziv)
  • Dimenzija (oblik)
  • Vrsta podataka (dtype)

Svaka operacija koju ćete obaviti s TensorFlowom uključuje manipulaciju tenzorom. Postoje četiri glavna tipa tenzora koje možete stvoriti:

  • tf.Promjenjivo
  • tf.konstantno
  • tf. rezervirano mjesto
  • tf.SparseTensor

U ovom vodiču naučit ćete kako stvoriti tf.constant i tf.Variable.

Prije nego što prođemo kroz tutorial, pobrinite se da aktivirate conda okruženje s TensorFlowom. Nazvali smo ovo okruženje zdravo-tf.

Za korisnike MacOS-a:

source activate hello-tf 

Za korisnike sustava Windows:

activate hello-tf 

Nakon što to učinite, spremni ste za uvoz tensorflowa

# Import tfimport tensorflow as tf 

Stvorite tenzor n-dimenzije

Počinjete s stvaranjem tenzora s jednom dimenzijom, naime skalarom.

Da biste stvorili tenzor, možete upotrijebiti tf.constant () kao što je prikazano u donjem primjeru oblika tenzora TensorFlow:

tf.constant(value, dtype, name = "")arguments- `value`: Value of n dimension to define the tensor. Optional- `dtype`: Define the type of data:- `tf.string`: String variable- `tf.float32`: Float variable- `tf.int16`: Integer variable- "name": Name of the tensor. Optional. By default, `Const_1:0` 

Da biste stvorili tenzor dimenzije 0, pokrenite sljedeći kod

## rank 0# Default namer1 = tf.constant(1, tf.int16)print(r1)

Izlaz

Tensor("Const:0", shape=(), dtype=int16) 

# Named my_scalarr2 = tf.constant(1, tf.int16, name = "my_scalar")print(r2) 

Izlaz

Tensor("my_scalar:0", shape=(), dtype=int16) 

Svaki tenzor prikazuje se imenom tenzora. Svaki objekt tenzora definiran je atributima tenzora poput jedinstvene oznake (ime), dimenzije (oblika) i tipova podataka TensorFlow (dtip).

Možete definirati tenzor s decimalnim vrijednostima ili sa nizom promjenom vrste podataka.

# Decimalr1_decimal = tf.constant(1.12345, tf.float32)print(r1_decimal)# Stringr1_string = tf.constant("Guru99", tf.string)print(r1_string) 

Izlaz

Tensor("Const_1:0", shape=(), dtype=float32)Tensor("Const_2:0", shape=(), dtype=string) 

Tenzor dimenzije 1 može se stvoriti kako slijedi:

## Rank 1r1_vector = tf.constant([1,3,5], tf.int16)print(r1_vector)r2_boolean = tf.constant([True, True, False], tf.bool)print(r2_boolean) 

Izlaz

Tensor("Const_3:0", shape=(3,), dtype=int16)Tensor("Const_4:0", shape=(3,), dtype=bool) 

Možete primijetiti da se oblik TensorFlow sastoji samo od 1 stupca.

Da biste stvorili niz od 2 dimenzije tenzora, morate zatvoriti zagrade nakon svakog retka. U nastavku pogledajte primjer oblika Keras tenzora

## Rank 2r2_matrix = tf.constant([ [1, 2],[3, 4] ],tf.int16)print(r2_matrix) 

Izlaz

Tensor("Const_5:0", shape=(2, 2), dtype=int16) 

Matrica ima 2 retka i 2 stupca ispunjena vrijednostima 1, 2, 3, 4.

Matrica s 3 dimenzije izrađuje se dodavanjem još jedne razine sa zagradama.

## Rank 3r3_matrix = tf.constant([ [[1, 2],[3, 4],[5, 6]] ], tf.int16)print(r3_matrix) 

Izlaz

Tensor("Const_6:0", shape=(1, 3, 2), dtype=int16) 

Matrica izgleda kao slika dvije.

Oblik tenzora

Kada ispisujete tenzor, TensorFlow pogađa oblik. Međutim, oblik tenzora možete dobiti pomoću svojstva oblika TensorFlow.

Ispod konstruirate matricu ispunjenu brojem od 10 do 15 i provjeravate oblik m_shape

# Shape of tensorm_shape = tf.constant([ [10, 11],[12, 13],[14, 15] ])m_shape.shape 

Izlaz

TensorShape([Dimension(3), Dimension(2)]) 

Matrica ima 3 retka i 2 stupca.

TensorFlow ima korisne naredbe za stvaranje vektora ili matrice ispunjene s 0 ili 1. Na primjer, ako želite stvoriti 1-D tenzor određenog oblika 10, ispunjen s 0, možete pokrenuti donji kod:

# Create a vector of 0print(tf.zeros(10)) 

Izlaz

Tensor("zeros:0", shape=(10,), dtype=float32) 

Svojstvo radi i za matricu. Ovdje stvarate matricu 10x10 ispunjenu s 1

# Create a vector of 1print(tf.ones([10, 10])) 

Izlaz

Tensor("ones:0", shape=(10, 10), dtype=float32) 

Možete koristiti oblik zadane matrice da biste napravili vektor jedinica. Matrica m_shape dimenzija je 3x2. Možete stvoriti tenzor s 3 retka koji je jedan ispunio sljedećim kodom:

# Create a vector of ones with the same number of rows as m_shapeprint(tf.ones(m_shape.shape[0])) 

Izlaz

Tensor("ones_1:0", shape=(3,), dtype=float32) 

Ako u zagradu proslijedite vrijednost 1, možete konstruirati vektor jedinica jednak broju stupaca u matrici m_shape.

# Create a vector of ones with the same number of column as m_shapeprint(tf.ones(m_shape.shape[1])) 

Izlaz

Tensor("ones_2:0", shape=(2,), dtype=float32) 

Napokon, možete stvoriti matricu 3x2 samo s jednom

print(tf.ones(m_shape.shape)) 

Izlaz

Tensor("ones_3:0", shape=(3, 2), dtype=float32) 

Vrsta podataka

Drugo svojstvo tenzora je vrsta podataka. Tenzor istodobno može imati samo jednu vrstu podataka. Tenzor može imati samo jednu vrstu podataka. Tip možete vratiti sa svojstvom dtype.

print(m_shape.dtype) 

Izlaz

 

U nekim prilikama želite promijeniti vrstu podataka. U programu TensorFlow to je moguće metodom tf.cast.

Primjer

Ispod se plutajući tenzor pretvara u cijeli broj upotrebom metode cast.

# Change type of datatype_float = tf.constant(3.123456789, tf.float32)type_int = tf.cast(type_float, dtype=tf.int32)print(type_float.dtype)print(type_int.dtype) 

Izlaz


 

TensorFlow automatski odabire vrstu podataka kada argument nije naveden tijekom izrade tenzora. TensorFlow će pogoditi koje su najvjerojatnije vrste podataka. Na primjer, ako proslijedite tekst, on će pretpostaviti da je to niz i pretvoriti ga u niz.

Izrada operatora

Neki korisni operateri TensorFlow

Znate kako stvoriti tenzor s TensorFlowom. Vrijeme je da naučite kako izvoditi matematičke operacije.

TensorFlow sadrži sve osnovne operacije. Možete započeti s jednostavnim. Za izračun kvadrata broja upotrijebit ćete metodu TensorFlow. Ova je operacija izravna jer je za konstrukciju tenzora potreban samo jedan argument.

Kvadrat broja konstruiran je s tf.sqrt (x) s x kao plutajući broj.

x = tf.constant([2.0], dtype = tf.float32)print(tf.sqrt(x)) 

Izlaz

Tensor("Sqrt:0", shape=(1,), dtype=float32) 

Napomena: Izlaz je vratio objekt tenzora, a ne rezultat kvadrata 2. U primjeru ispisujete definiciju tenzora, a ne stvarnu procjenu operacije. U sljedećem ćete odjeljku naučiti kako TensorFlow radi na izvršavanju operacija.

Slijedi popis najčešće korištenih operacija. Ideja je ista. Svaka operacija zahtijeva jedan ili više argumenata.

  • tf.add (a, b)
  • tf.sažetak (a, b)
  • tf.množi (a, b)
  • tf.div (a, b)
  • tf.pow (a, b)
  • tf.exp (a)
  • tf.sqrt (a)

Primjer

# Addtensor_a = tf.constant([[1,2]], dtype = tf.int32)tensor_b = tf.constant([[3, 4]], dtype = tf.int32)tensor_add = tf.add(tensor_a, tensor_b)print(tensor_add) 

Izlaz

Tensor("Add:0", shape=(1, 2), dtype=int32) 

Objašnjenje koda

Stvorite dva tenzora:

  • jedan tenzor s 1 i 2
  • jedan tenzor s 3 i 4

Zbrojite oba tenzora.

Obavijest : da oba tenzora moraju imati jednak oblik. Možete izvršiti množenje preko dva tenzora.

# Multiplytensor_multiply = tf.multiply(tensor_a, tensor_b)print(tensor_multiply) 

Izlaz

Tensor("Mul:0", shape=(1, 2), dtype=int32) 

Varijable

Do sada ste stvorili samo stalne tenzore. Nije od velike koristi. Podaci uvijek dolaze s različitim vrijednostima, da biste to uhvatili, možete koristiti klasu Variable. Predstavljat će čvor u kojem se vrijednosti uvijek mijenjaju.

Da biste stvorili varijablu, možete koristiti metodu tf.get_variable ()

tf.get_variable(name = "", values, dtype, initializer)argument- `name = ""`: Name of the variable- `values`: Dimension of the tensor- `dtype`: Type of data. Optional- `initializer`: How to initialize the tensor. OptionalIf initializer is specified, there is no need to include the `values` as the shape of `initializer` is used. 

Na primjer, kod u nastavku stvara dvodimenzionalnu varijablu s dvije slučajne vrijednosti. Prema zadanim postavkama TensorFlow vraća slučajnu vrijednost. Varijabli dajete ime var

# Create a Variable## Create 2 Randomized valuesvar = tf.get_variable("var", [1, 2])print(var.shape) 

Izlaz

(1, 2) 

U drugom primjeru kreirate varijablu s jednim retkom i dva stupca. Morate upotrijebiti [1,2] za stvaranje dimenzije varijable

Inicijalne vrijednosti ovog tenzora su jednake nuli. Na primjer, kada trenirate model, morate imati početne vrijednosti da biste izračunali težinu značajki. Ispod postavite početnu vrijednost na nulu.

var_init_1 = tf.get_variable("var_init_1", [1, 2], dtype=tf.int32, initializer=tf.zeros_initializer)print(var_init_1.shape) 

Izlaz

(1, 2) 

Vrijednosti konstante tenzora možete proslijediti u varijablu. Stvorite konstantni tenzor metodom tf.constant (). Koristite ovaj tenzor za inicijalizaciju varijable.

Prve vrijednosti varijable su 10, 20, 30 i 40. Novi tenzor imat će oblik 2x2.

# Create a 2x2 matrixtensor_const = tf.constant([[10, 20],[30, 40]])# Initialize the first value of the tensor equals to tensor_constvar_init_2 = tf.get_variable("var_init_2", dtype=tf.int32, initializer=tensor_const)print(var_init_2.shape) 

Izlaz

(2, 2) 

Rezerviranog mjesta

Rezervirano mjesto ima svrhu hraniti tenzor. Rezervirano mjesto koristi se za inicijalizaciju podataka koji teku u tenzorima. Da biste unijeli rezervirano mjesto, morate koristiti metodu feed_dict. Rezervoar će se hraniti samo unutar sesije.

U sljedećem ćete primjeru vidjeti kako stvoriti rezervirano mjesto metodom tf.placeholder. U sljedećoj će se sjednici naučiti hraniti rezervirano mjesto stvarnom vrijednošću tenzora.

Sintaksa je:

tf.placeholder(dtype,shape=None,name=None )arguments:- `dtype`: Type of data- `shape`: dimension of the placeholder. Optional. By default, shape of the data- `name`: Name of the placeholder. Optionaldata_placeholder_a = tf.placeholder(tf.float32, name = "data_placeholder_a")print(data_placeholder_a) 

Izlaz

Tensor("data_placeholder_a:0", dtype=float32) 

Sjednica

TensorFlow djeluje oko 3 glavne komponente:

  • Grafikon
  • Tenzor
  • Sjednica
Komponente Deskripcija

Grafikon

Grafikon je temeljni u TensorFlowu. Sve matematičke operacije (ops) izvode se unutar grafa. Možete zamisliti graf kao projekt u kojem se obavljaju sve operacije. Čvorovi predstavljaju ove operacije, oni mogu apsorbirati ili stvoriti nove tenzore.

Tenzor

Tenzor predstavlja podatke o napretku između operacija. Već ste vidjeli kako inicijalizirati tenzor. Razlika između konstante i varijable je u tome što će se početne vrijednosti varijable s vremenom mijenjati.

Sjednica

Sjednica će izvršiti operaciju iz grafikona. Da biste napunili graf vrijednostima tenzora, morate otvoriti sesiju. Unutar sesije morate pokrenuti operator da biste stvorili izlaz.

Grafovi i sesije su neovisni. Možete pokrenuti sesiju i dobiti vrijednosti koje ćete kasnije koristiti za daljnja izračunavanja.

U donjem primjeru ćete:

  • Stvorite dva tenzora
  • Stvorite operaciju
  • Otvorite sesiju
  • Ispišite rezultat

Korak 1) Stvorite dva tenzora x i y

## Create, run and evaluate a sessionx = tf.constant([2])y = tf.constant([4]) 

Korak 2) Operator kreirate množenjem x i y

## Create operatormultiply = tf.multiply(x, y) 

Korak 3) Otvarate sesiju. Sva izračunavanja dogodit će se unutar sesije. Kada završite, morate zatvoriti sesiju.

## Create a session to run the codesess = tf.Session()result_1 = sess.run(multiply)print(result_1)sess.close() 

Izlaz

[8] 

Objašnjenje koda

  • tf.Session (): Otvorite sesiju. Sve će operacije teći unutar sesija
  • trčanje (množenje): izvršavanje operacije kreirane u koraku 2.
  • ispis (rezultat_1): Konačno, možete ispisati rezultat
  • close (): Zatvorite sesiju

Rezultat pokazuje 8, što je množenje x i y.

Drugi način stvaranja sesije je unutar bloka. Prednost je što automatski zatvara sesiju.

with tf.Session() as sess:result_2 = multiply.eval()print(result_2) 

Izlaz

[8] 

U kontekstu sesije možete koristiti metodu eval () za izvršavanje operacije. Ekvivalentno je pokrenuti (). To čini kod čitljivijim.

Možete stvoriti sesiju i vidjeti vrijednosti unutar tenzora koje ste do sada stvorili.

## Check the tensors created beforesess = tf.Session()print(sess.run(r1))print(sess.run(r2_matrix))print(sess.run(r3_matrix)) 

Izlaz

1[[1 2][3 4]][[[1 2][3 4][5 6]]] 

Varijable su prema zadanim postavkama prazne, čak i nakon što stvorite tenzor. Morate inicijalizirati varijablu ako želite koristiti varijablu. Objekt tf.global_variables_initializer () treba pozvati da bi se inicijalizirale vrijednosti varijable. Ovaj će objekt eksplicitno inicijalizirati sve varijable. Ovo je korisno prije nego što obučite model.

Možete provjeriti vrijednosti varijabli koje ste stvorili prije. Imajte na umu da za procjenu tenzora trebate koristiti trčanje

sess.run(tf.global_variables_initializer())print(sess.run(var))print(sess.run(var_init_1))print(sess.run(var_init_2)) 

Izlaz

[[-0.05356491 0.75867283]][[0 0]][[10 20][30 40]] 

Možete koristiti rezervirano mjesto koje ste ranije stvorili i hraniti ga stvarnom vrijednošću. Morate proslijediti podatke u metodu feed_dict.

Na primjer, uzet ćete snagu 2 rezerviranog mjesta data_placeholder_a.

import numpy as nppower_a = tf.pow(data_placeholder_a, 2)with tf.Session() as sess:data = np.random.rand(1, 10)print(sess.run(power_a, feed_dict={data_placeholder_a: data})) # Will succeed. 

Objašnjenje koda

  • import numpy as np: Uvoz numpy biblioteke za stvaranje podataka
  • tf.pow (data_placeholder_a, 2): Stvorite operativni sustav
  • np.random.rand (1, 10): Stvorite slučajni niz podataka
  • feed_dict = {data_placeholder_a: data}: Napunite rezervirano mjesto podacima

Izlaz

[[0.05478134 0.27213147 0.8803037 0.0398424 0.21172127 0.01444725 0.02584014 0.3763949 0.66022706 0.7565559 ]] 

Grafikon

TensorFlow ovisi o genijalnom pristupu izvedbi operacije. Svi proračuni su predstavljeni shemom protoka podataka. Grafikon protoka podataka razvijen je kako bi se vidjele ovisnosti podataka između pojedinih operacija. Matematička formula ili algoritam izrađeni su od niza uzastopnih operacija. Grafikon je prikladan način za vizualizaciju koordinacije proračuna.

Grafikon prikazuje čvor i rub . Čvor je prikaz operacije, odnosno jedinice računanja. Rub je tenzor, on može proizvesti novi tenzor ili potrošiti ulazne podatke. Ovisi o ovisnostima između pojedinih operacija.

Struktura grafa povezuje operacije (tj. Čvorove) i način na koji su to operacije. Imajte na umu da grafikon ne prikazuje rezultat operacija, on samo pomaže u vizualizaciji veze između pojedinih operacija.

Pogledajmo primjer.

Zamislite da želite procijeniti sljedeću funkciju:

TensorFlow će stvoriti grafikon za izvršavanje funkcije. Grafikon izgleda ovako:

Primjer grafa TensorFlow

Lako možete vidjeti put kojim će tenzori ići do konačnog odredišta.

Na primjer, možete vidjeti da se operacija dodavanja ne može izvršiti prije i. Grafikon objašnjava da će:

  1. izračunati i:
  2. zbrojiti 1) zajedno
  3. dodaj na 2)
  4. dodaj 3) u
x = tf.get_variable("x", dtype=tf.int32, initializer=tf.constant([5]))z = tf.get_variable("z", dtype=tf.int32, initializer=tf.constant([6]))c = tf.constant([5], name = "constant")square = tf.constant([2], name = "square")f = tf.multiply(x, z) + tf.pow(x, square) + z + c 

Objašnjenje koda

  • x: Inicijalizirajte varijablu zvanu x s ​​konstantnom vrijednošću 5
  • z: Inicijalizirajte varijablu zvanu z konstantnom vrijednošću 6
  • c: Inicijalizirajte konstantni tenzor nazvan c s konstantnom vrijednošću 5
  • kvadrat: Inicijalizirajte konstantni tenzor nazvan kvadrat s konstantnom vrijednošću 2
  • f: Konstruirajte operatora

U ovom primjeru odlučujemo da vrijednosti varijabli budu fiksne. Također smo stvorili konstantni tenzor nazvan c koji je konstantni parametar u funkciji f. Potrebna je fiksna vrijednost 5. Na grafikonu ovaj parametar možete vidjeti u tenzoru koji se naziva konstanta.

Također smo konstruirali konstantni tenzor snage u operateru tf.pow (). Nije potrebno. Učinili smo to tako da na grafu možete vidjeti naziv tenzora. To je krug koji se naziva kvadrat.

Iz grafikona možete razumjeti što će se dogoditi s tenzorima i kako može vratiti izlaz od 66.

Kôd u nastavku procjenjuje funkciju u sesiji.

init = tf.global_variables_initializer() # prepare to initialize all variableswith tf.Session() as sess:init.run() # Initialize x and yfunction_result = f.eval()print(function_result) 

Izlaz

[66] 

Sažetak

TensorFlow djeluje oko:

  • Grafikon : Računsko okruženje koje sadrži operacije i tenzore
  • Tenzori : Predstavlja podatke (ili vrijednost) koji će teći u grafikonu. To je rub na grafikonu
  • Sjednice : Omogućite izvršavanje operacija

Stvorite konstantni tenzor

konstantno objekt

D0

tf.constant (1, tf.int16)

D1

tf.constant ([1,3,5], tf.int16)

D2

tf.constant ([[1, 2], [3, 4]], tf.int16)

D3

tf.konstantno ([[[1, 2], [3, 4], [5, 6]]], tf.int16)

Stvorite operatora

Stvorite operatora Objekt

a + b

tf.add (a, b)

a * b

tf.množi (a, b)

Stvorite varijabilni tenzor

Stvorite varijablu

objekt

slučajna vrijednost

tf.get_variable ("var", [1, 2])

inicijalizirana prva vrijednost

tf.get_variable ("var_init_2", dtype = tf.int32, inicijalizator = [[1, 2], [3, 4]])

Otvorite sesiju

Sjednica objekt

Stvorite sesiju

tf.Session ()

Pokrenite sesiju

tf.Session.run ()

Procijenite tenzor

varijabla_ime.eval ()

Zatvorite sesiju

sess.close ()

Sjednica po bloku

s tf.Session () kao sess: