Osnove TensorFlowa: Tensor, oblika, vrsta, seje in amp; Operaterji

Kazalo:

Anonim

Kaj je tenzor?

Ime Tensorflow neposredno izhaja iz njegovega osnovnega okvira: Tensor. V programu Tensorflow vsi izračuni vključujejo tenzorje. Tenzor je vektor ali matrika n-dimenzij, ki predstavlja vse vrste podatkov. Vse vrednosti v tenzorju imajo enak podatkovni tip z znano (ali delno znano) obliko. Oblika podatkov je dimenzionalnost matrike ali polja.

Tenzor lahko izvira iz vhodnih podatkov ali rezultata izračuna. V programu TensorFlow se vse operacije izvajajo znotraj grafa. Graf je niz izračuna, ki poteka zaporedoma. Vsaka operacija se imenuje op vozlišče in je med seboj povezana.

Graf prikazuje oris in povezave med vozlišči. Vendar vrednosti ne prikaže. Rob vozlišč je tenzor, tj. Način za zapolnitev operacije s podatki.

V strojnem učenju se modeli hranijo s seznamom predmetov, imenovanih vektorji lastnosti. Vektor lastnosti je lahko katere koli podatkovne vrste. Vektor lastnosti je ponavadi primarni vhod za zapolnitev tenzorja. Te vrednosti se bodo skozi tenzor pretakale v op vozlišče, rezultat te operacije / izračuna pa bo ustvaril nov tenzor, ki bo nato uporabljen v novi operaciji. Vse te operacije si lahko ogledate v grafu.

V tej vadnici se boste naučili osnov TensorFlow, kot so

  • Kaj je tenzor?
  • Zastopanje tenzorja
  • Vrste tenzorja
  • Ustvari tenzor n-dimenzije
  • Oblika tenzorja
  • Vrsta podatkov
  • Ustvarjanje operaterja
  • Nekaj ​​uporabnih operaterjev TensorFlow
  • Spremenljivke
  • Rezervirano mesto
  • Seja
  • Graf

Zastopanje tenzorja

V programu TensorFlow je tenzor zbirka vektorjev lastnosti (tj. Matrika) n-dimenzij. Če imamo na primer matriko 2x3 z vrednostmi od 1 do 6, zapišemo:

Zastopanje tenzorja

TensorFlow predstavlja to matriko kot:

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

Če ustvarimo tridimenzionalno matrico z vrednostmi od 1 do 8, imamo:

TensorFlow predstavlja to matriko kot:

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

Opomba: Tenzor je lahko predstavljen s skalarjem ali pa ima obliko več kot tri dimenzije. Preprosteje je vizualizirati višjo raven dimenzije.

Vrste tenzorja

V TensorFlowu vsi izračuni potekajo skozi enega ali več tenzorjev. Tf.tensor je objekt s tremi lastnostmi:

  • Edinstvena nalepka (ime)
  • Dimenzija (oblika)
  • Podatkovni tip (dtype)

Vsaka operacija, ki jo boste izvedli s TensorFlowom, vključuje manipulacijo s tenzorjem. Obstajajo štiri glavne vrste tenzorjev, ki jih lahko ustvarite:

  • tf.Variable
  • tf.konstantno
  • tf.placeholder
  • tf.SparseTensor

V tej vadnici boste izvedeli, kako ustvariti tf.constant in tf.Variable.

Preden se lotimo vaje, preverite, ali ste aktivirali okolje conda s TensorFlow. Temu okolju smo dali ime hello-tf.

Za uporabnike MacOS:

source activate hello-tf 

Za uporabnike sistema Windows:

activate hello-tf 

Ko to storite, ste pripravljeni na uvoz tensorflowa

# Import tfimport tensorflow as tf 

Ustvari tenzor n-dimenzije

Začnete z ustvarjanjem tenzorja z eno dimenzijo, in sicer skalarjem.

Če želite ustvariti tenzor, lahko uporabite tf.constant (), kot je prikazano v spodnjem primeru oblike tenzorja 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` 

Če želite ustvariti tenzor dimenzije 0, zaženite naslednjo kodo

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

Izhod

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

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

Izhod

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

Vsak tenzor se prikaže z imenom tenzorja. Vsak tenzorski objekt je definiran z atributi tenzorja, kot so unikatna oznaka (ime), dimenzija (oblika) in podatkovni tipi TensorFlow (dtype).

S spreminjanjem vrste podatkov lahko definirate tenzor z decimalnimi vrednostmi ali z nizom.

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

Izhod

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

Tenzor dimenzije 1 lahko ustvarite na naslednji način:

## 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) 

Izhod

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

Opazite, da je oblika TensorFlow sestavljena samo iz 1 stolpca.

Če želite ustvariti matriko z dvema napetostnima dimenzijama, morate po vsaki vrstici zapreti oklepaje. Spodaj si oglejte primer oblike Keras Tensor

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

Izhod

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

Matrica ima 2 vrstici in 2 stolpca, napolnjena z vrednostmi 1, 2, 3, 4.

Matrika s 3 dimenzijami je zgrajena tako, da se z oklepaji doda še ena raven.

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

Izhod

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

Matrica je videti kot slika dve.

Oblika tenzorja

Ko natisnete tenzor, TensorFlow ugane obliko. Lahko pa dobite obliko tenzorja z lastnostjo oblike TensorFlow.

Spodaj zgradite matrico, napolnjeno s številom od 10 do 15, in preverite obliko m_shape

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

Izhod

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

Matrica ima 3 vrstice in 2 stolpca.

TensorFlow ima uporabne ukaze za ustvarjanje vektorja ali matrike, napolnjene z 0 ali 1. Če želite na primer ustvariti 1-D tenzor s posebno obliko 10, napolnjen z 0, lahko zaženete spodnjo kodo:

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

Izhod

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

Lastnost deluje tudi za matriko. Tu ustvarite matriko 10x10, napolnjeno z 1

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

Izhod

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

Z obliko dane matrike lahko naredite vektor enot. Matrika m_shape je dimenzije 3x2. Ustvarite lahko tenzor s tremi vrsticami, ki jih eden zapolni z naslednjo kodo:

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

Izhod

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

Če vrednost 1 prenesete v oklepaj, lahko sestavite vektor, enak številu stolpcev v matriki m_shape.

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

Izhod

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

Končno lahko ustvarite matriko 3x2 samo z eno

print(tf.ones(m_shape.shape)) 

Izhod

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

Vrsta podatkov

Druga lastnost tenzorja je vrsta podatkov. Tenzor ima lahko hkrati samo eno vrsto podatkov. Tenzor ima lahko samo eno vrsto podatkov. Tip lahko vrnete z lastnostjo dtype.

print(m_shape.dtype) 

Izhod

 

V nekaterih primerih želite spremeniti vrsto podatkov. V programu TensorFlow je to mogoče z metodo tf.cast.

Primer

Spodaj se tenzor plavajočega pretvori v celo število z uporabo metode oddaje.

# 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) 

Izhod


 

TensorFlow samodejno izbere vrsto podatkov, kadar argument med izdelavo tenzorja ni določen. TensorFlow bo uganil, katere vrste podatkov so najverjetnejše. Če na primer prenesete besedilo, bo uganil, da gre za niz, in ga pretvoril v niz.

Ustvarjanje operaterja

Nekaj ​​uporabnih operaterjev TensorFlow

S TensorFlow veste, kako ustvariti tenzor. Čas je, da se naučimo izvajati matematične operacije.

TensorFlow vsebuje vse osnovne operacije. Začnete lahko s preprostim. Za izračun kvadrata števila boste uporabili metodo TensorFlow. Ta operacija je enostavna, ker je za konstruiranje tenzorja potreben le en argument.

Kvadrat števila je sestavljen s tf.sqrt (x) z x kot plavajočim številom.

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

Izhod

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

Opomba: Izhod je vrnil tenzorski objekt in ne rezultat kvadrata 2. V primeru natisnete definicijo tenzorja in ne dejanske ocene operacije. V naslednjem poglavju boste izvedeli, kako deluje TensorFlow za izvajanje operacij.

Sledi seznam najpogosteje uporabljenih operacij. Ideja je ista. Vsaka operacija zahteva enega ali več argumentov.

  • tf.add (a, b)
  • tf. povzetek (a, b)
  • tf pomnoži (a, b)
  • tf.div (a, b)
  • tf.pow (a, b)
  • tf.exp (a)
  • tf.sqrt (a)

Primer

# 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) 

Izhod

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

Razlaga kode

Ustvari dva tenzorja:

  • en tenzor z 1 in 2
  • en tenzor s 3 in 4

Seštejete oba tenzorja.

Opomba : oba tenzorja morata imeti enako obliko. Množenje lahko izvedete med dvema tenzorjema.

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

Izhod

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

Spremenljivke

Do zdaj ste ustvarili le stalne tenzorje. Ni od velike koristi. Podatki vedno prispejo z različnimi vrednostmi. Za zajem lahko uporabite razred Variable. Predstavljal bo vozlišče, kjer se vrednosti vedno spreminjajo.

Če želite ustvariti spremenljivko, lahko uporabite metodo 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. 

Spodnja koda na primer ustvari dvodimenzionalno spremenljivko z dvema naključnima vrednostma. Privzeto vrne TensorFlow naključno vrednost. Spremenljivko poimenujete var

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

Izhod

(1, 2) 

V drugem primeru ustvarite spremenljivko z eno vrstico in dvema stolpcema. Za ustvarjanje dimenzije spremenljivke morate uporabiti [1,2]

Začetne vrednosti tega tenzorja so enake nič. Na primer, ko trenirate model, morate imeti začetne vrednosti za izračun teže lastnosti. Spodaj nastavite te začetne vrednosti na nič.

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

Izhod

(1, 2) 

Vrednosti konstantnega tenzorja lahko prenesete v spremenljivko. Z metodo tf.constant () ustvarite konstantni tenzor. S tem tenzorjem inicializirate spremenljivko.

Prve vrednosti spremenljivke so 10, 20, 30 in 40. Novi tenzor bo imel obliko 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) 

Izhod

(2, 2) 

Rezervirano mesto

Namen ograde je hranjenje tenzorja. Nadomestni znak se uporablja za inicializacijo podatkov, da tečejo znotraj tenzorjev. Če želite navesti rezervirano mesto, morate uporabiti metodo feed_dict. Omejevalnik bo napolnjen samo znotraj seje.

V naslednjem primeru boste videli, kako ustvarite rezervirano mesto z metodo tf.placeholder. V naslednji seji se boste naučili vnašati rezervirano mesto z dejansko tenzorsko vrednostjo.

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) 

Izhod

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

Seja

TensorFlow deluje okoli treh glavnih komponent:

  • Graf
  • Tensor
  • Seja
Komponente Opis

Graf

Graf je bistven za TensorFlow. Vse matematične operacije (ops) se izvajajo znotraj grafa. Graf si lahko predstavljate kot projekt, kjer se izvajajo vse operacije. Vozlišča predstavljajo te operacije, lahko absorbirajo ali ustvarijo nove tenzorje.

Tensor

Tenzor predstavlja podatke, ki napredujejo med operacijami. Prej ste videli, kako inicializirati tenzor. Razlika med konstanto in spremenljivko je, da se začetne vrednosti spremenljivke sčasoma spreminjajo.

Seja

Seja bo izvedla operacijo iz grafa. Če želite graf napolniti z vrednostmi tenzorja, morate odpreti sejo. Znotraj seje morate zagnati operaterja, da ustvarite izhod.

Grafi in seje so neodvisni. Lahko zaženete sejo in pridobite vrednosti, ki jih boste pozneje uporabili za nadaljnje izračune.

V spodnjem primeru boste:

  • Ustvari dva tenzorja
  • Ustvari operacijo
  • Odprite sejo
  • Natisnite rezultat

1. korak) Ustvarite dva tenzorja x in y

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

Korak 2) Operator ustvarite tako, da pomnožite x in y

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

3. korak) Odprete sejo. Vsi izračuni bodo izvedeni znotraj seje. Ko končate, morate sejo zapreti.

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

Izhod

[8] 

Razlaga kode

  • tf.Session (): Odprite sejo. Vse operacije bodo potekale znotraj sej
  • zaženi (pomnoži): izvedite operacijo, ustvarjeno v 2. koraku.
  • print (result_1): Končno lahko natisnete rezultat
  • close (): zaprite sejo

Rezultat prikazuje 8, kar je množenje x in y.

Drug način za ustvarjanje seje je znotraj bloka. Prednost je, da samodejno zapre sejo.

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

Izhod

[8] 

V okviru seje lahko za izvedbo operacije uporabite metodo eval (). Enakovredno je zagonu (). Koda je bolj berljiva.

Ustvarite lahko sejo in si ogledate vrednosti znotraj tenzorjev, ki ste jih ustvarili do zdaj.

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

Izhod

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

Spremenljivke so privzeto prazne tudi po ustvarjanju tenzorja. Če želite spremenljivko uporabiti, morate inicializirati spremenljivko. Za inicializacijo vrednosti spremenljivke je treba poklicati objekt tf.global_variables_initializer (). Ta objekt bo izrecno inicializiral vse spremenljivke. To je koristno, preden izurite model.

Vrednosti spremenljivk, ki ste jih prej ustvarili, lahko preverite. Upoštevajte, da morate za oceno tenzorja uporabiti run

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

Izhod

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

Uporabite lahko rezervirano mesto, ki ste ga ustvarili prej, in ga vnesete z dejansko vrednostjo. Podatke morate posredovati v metodo feed_dict.

Na primer, vzamete moč 2 nadomestnega podatka 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. 

Razlaga kode

  • import numpy as np: uvozite numpy knjižnico, da ustvarite podatke
  • tf.pow (data_placeholder_a, 2): Ustvarite operacijski sistem
  • np.random.rand (1, 10): Ustvari naključno polje podatkov
  • feed_dict = {data_placeholder_a: data}: Omejevalnik napolnite s podatki

Izhod

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

Graf

TensorFlow je odvisen od genialnega pristopa k upodabljanju operacije. Vsi izračuni so predstavljeni s shemo pretoka podatkov. Graf pretoka podatkov je bil razvit, da se upoštevajo odvisnosti podatkov med posameznimi operacijami. Matematična formula ali algoritem je sestavljen iz več zaporednih operacij. Graf je priročen način za vizualizacijo koordinacije izračuna.

Graf prikazuje vozlišče in rob . Vozlišče je prikaz operacije, tj. Računske enote. Rob je tenzor, lahko ustvari nov tenzor ali porabi vhodne podatke. Odvisno od odvisnosti med posameznimi operacijami.

Struktura grafa povezuje operacije (tj. Vozlišča) in način njihovega podajanja. Upoštevajte, da graf ne prikazuje rezultata operacij, pomaga le pri vizualizaciji povezave med posameznimi operacijami.

Poglejmo primer.

Predstavljajte si, da želite ovrednotiti naslednjo funkcijo:

TensorFlow bo ustvaril graf za izvajanje funkcije. Graf je videti takole:

Primer grafa TensorFlow

Preprosto vidite pot, po kateri bodo tenzorji prišli do končnega cilja.

Na primer, lahko vidite, da operacije add ni mogoče izvesti pred in. Graf pojasnjuje, da bo:

  1. izračuna in:
  2. dodajte 1) skupaj
  3. dodaj k 2)
  4. dodaj 3) v
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 

Razlaga kode

  • x: Inicializirajte spremenljivko, imenovano x, s konstantno vrednostjo 5
  • z: Inicializirajte spremenljivko, imenovano z, s konstantno vrednostjo 6
  • c: Inicializirajte konstantni tenzor, imenovan c, s konstantno vrednostjo 5
  • kvadrat: Inicializirajte konstantni tenzor, imenovan kvadrat, s konstantno vrednostjo 2
  • f: Izdelajte operaterja

V tem primeru smo se odločili, da vrednosti spremenljivk ostanejo fiksne. Ustvarili smo tudi konstantni tenzor, imenovan c, ki je konstanten parameter v funkciji f. Zavzame fiksno vrednost 5. Na grafu lahko vidite ta parameter v tenzorju, imenovanem konstanta.

Izdelali smo tudi konstantni tenzor za moč v operaterju tf.pow (). Ni potrebno. To smo storili tako, da lahko na grafu vidite ime tenzorja. To je krog, imenovan kvadrat.

Iz grafa lahko razberete, kaj se bo zgodilo s tenzorji in kako lahko vrne izhodno vrednost 66.

Spodnja koda oceni funkcijo v seji.

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) 

Izhod

[66] 

Povzetek

TensorFlow deluje okoli:

  • Graf : Računalniško okolje, ki vsebuje operacije in tenzorje
  • Tenzorji : predstavlja podatke (ali vrednost), ki se bodo pretakali v grafu. To je rob na grafu
  • Seje : dovolite izvajanje operacij

Ustvari konstantni tenzor

konstanten predmet

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.constant ([[[1, 2], [3, 4], [5, 6]]], tf.int16)

Ustvarite operaterja

Ustvarite operaterja Predmet

a + b

tf.add (a, b)

a * b

tf pomnoži (a, b)

Ustvari spremenljivko tenzorja

Ustvari spremenljivko

predmet

naključna vrednost

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

inicializirana prva vrednost

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

Odprite sejo

Seja predmet

Ustvari sejo

tf.Session ()

Zaženite sejo

tf.Session.run ()

Ocenite tenzor

spremenljivo_ime.eval ()

Zaprite sejo

sess.close ()

Seja po blokih

s tf.Session () kot sess: