Osnove TensorFlowa: tenzor, oblik, vrsta, sesije & Operaulagatelji
ล to je tenzor?
Ime Tensorflowa izravno je izvedeno iz njegovog temeljnog okvira: Tensor. U Tensorflowu svi proraฤuni 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 se sve operacije provode unutar grafa. Graf je skup izraฤuna koji se odvija sukcesivno. Svaka operacija se naziva operativni ฤvor i meฤusobno su povezani.
Grafikon ocrtava operacije i veze izmeฤu ฤvorova. Meฤutim, ne prikazuje vrijednosti. Rub ฤvorova je tenzor, tj. naฤin da se operacija popuni podacima.
U strojnom uฤenju, modeli se unose popisom objekata koji se nazivaju vektori znaฤajki. Vektor obiljeลพja moลพe biti bilo koje vrste podataka. Vektor obiljeลพja obiฤno ฤe biti primarni ulaz za popunjavanje tenzora. Ove vrijednosti ฤe teฤi u operativni ฤvor kroz tenzor, a rezultat ove operacije/izraฤunavanja ฤe stvoriti novi tenzor koji ฤe se zauzvrat koristiti u novoj operaciji. Sve ove operacije mogu se vidjeti na grafikonu.
Reprezentacija tenzora
U TensorFlowu, tenzor je zbirka vektora znaฤajki (tj. niza) n-dimenzija. Na primjer, ako imamo matricu 2ร3 s vrijednostima od 1 do 6, piลกemo:

TensorFlow predstavlja ovu matricu kao:
[[1, 2, 3], [4, 5, 6]]
Ako kreiramo trodimenzionalnu matricu s vrijednostima od 1 do 8, imamo:
TensorFlow predstavlja ovu matricu kao:
[ [[1, 2],
[[3, 4],
[[5, 6],
[[7,8] ]
Biljeลกka: Tenzor se moลพe prikazati skalarom ili moลพe imati oblik viลกe od tri dimenzije. Samo je kompliciranije vizualizirati viลกu razinu dimenzija.
Vrste tenzora
U TensorFlowu sva izraฤunavanja prolaze kroz jedan ili viลกe tenzora. tf.tensor je objekt s tri svojstva:
- Jedinstvena oznaka (ime)
- Dimenzija (oblik)
- Vrsta podataka (dtype)
Svaka operacija koju ฤete uฤiniti s TensorFlowom ukljuฤuje manipulaciju tenzorom. Postoje ฤetiri glavne vrste tenzora koje moลพete kreirati:
- tf.Promjenljiva
- tf.konstantan
- tf.rezervirano mjesto
- tf.SparseTensor
U ovom ฤete vodiฤu nauฤiti kako stvoriti tf.constant i tf.Variable.
Prije nego ลกto proฤemo kroz tutorial, provjerite jeste li aktivirali conda okruลพenje s TensorFlowom. Ovo okruลพenje nazvali smo hello-tf.
Za korisnika MacOS-a:
source activate hello-tf
Za Windows korisnik:
activate hello-tf
Nakon ลกto to uฤinite, spremni ste za uvoz tensorflowa
# Import tf import tensorflow as tf
Napravite tenzor n-dimenzije
Poฤinjete stvaranjem tenzora s jednom dimenzijom, naime skalarom.
Za izradu tenzora moลพete koristiti 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`
Za stvaranje tenzora dimenzije 0, pokrenite sljedeฤi kod
## rank 0 # Default name r1 = tf.constant(1, tf.int16) print(r1)
Izlaz
Tensor("Const:0", shape=(), dtype=int16)
# Named my_scalar r2 = tf.constant(1, tf.int16, name = "my_scalar") print(r2)
Izlaz
Tensor("my_scalar:0", shape=(), dtype=int16)
Svaki tenzor je prikazan imenom tenzora. Svaki objekt tenzora definiran je atributima tenzora kao ลกto su jedinstvena oznaka (ime), dimenzija (oblik) i tipovi podataka TensorFlow (dtype).
Tenzor moลพete definirati s decimalnim vrijednostima ili s nizom promjenom vrste podataka.
# Decimal
r1_decimal = tf.constant(1.12345, tf.float32)
print(r1_decimal)
# String
r1_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 kreirati na sljedeฤi 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)
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. Pogledajte primjer oblika Kerasovog tenzora u nastavku
## Rank 2
r2_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 se konstruira dodavanjem joลก jedne razine sa zagradama.
## Rank 3
r3_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 na slici 2.
Oblik tenzora
Kada ispisujete tenzor, TensorFlow pogaฤa oblik. Meฤutim, moลพete dobiti oblik tenzora sa svojstvom oblika TensorFlow.
U nastavku konstruirate matricu ispunjenu brojevima od 10 do 15 i provjerite oblik m_shape
# Shape of tensor
m_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 s odreฤenim oblikom 10, ispunjenim s 0, moลพete pokrenuti kod u nastavku:
# Create a vector of 0 print(tf.zeros(10))
Izlaz
Tensor("zeros:0", shape=(10,), dtype=float32)
Svojstvo vrijedi i za matricu. Ovdje stvarate matricu 10ร10 ispunjenu s 1
# Create a vector of 1 print(tf.ones([10, 10]))
Izlaz
Tensor("ones:0", shape=(10, 10), dtype=float32)
Moลพete upotrijebiti oblik zadane matrice da napravite vektor jedinica. Matrica m_shape je dimenzija 3ร2. Moลพete stvoriti tenzor s 3 retka ispunjena jednim pomoฤu sljedeฤeg koda:
# Create a vector of ones with the same number of rows as m_shape print(tf.ones(m_shape.shape[0]))
Izlaz
Tensor("ones_1:0", shape=(3,), dtype=float32)
Ako prenesete vrijednost 1 u zagradu, moลพete konstruirati vektor od jedinica jednak broju stupaca u matrici m_shape.
# Create a vector of ones with the same number of column as m_shape print(tf.ones(m_shape.shape[1]))
Izlaz
Tensor("ones_2:0", shape=(2,), dtype=float32)
Konaฤno, moลพete stvoriti matricu 3ร2 samo s jednim
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 moลพe imati samo jednu vrstu podataka u isto vrijeme. Tenzor moลพe imati samo jednu vrstu podataka. Moลพete vratiti tip sa svojstvom dtype.
print(m_shape.dtype)
Izlaz
<dtype: 'int32'>
U nekim sluฤajevima ลพelite promijeniti vrstu podataka. U TensorFlowu je to moguฤe pomoฤu metode tf.cast.
Primjer
U nastavku se tenzor float pretvara u cijeli broj koriลกtenjem metode cast.
# Change type of data type_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
<dtype: 'float32'> <dtype: 'int32'>
TensorFlow automatski odabire vrstu podataka kada argument nije naveden tijekom stvaranja tenzora. TensorFlow ฤe pogoditi koja je najvjerojatnija vrsta podataka. Na primjer, ako proslijedite tekst, on ฤe pogoditi da je niz i pretvoriti ga u niz.
Izrada operatora
Neki korisni TensorFlow operatori
Znate kako stvoriti tenzor s TensorFlowom. Vrijeme je da nauฤite izvoditi matematiฤke operacije.
TensorFlow sadrลพi sve osnovne operacije. Moลพete poฤeti s jednostavnim. Koristit ฤete metodu TensorFlow za izraฤunavanje kvadrata broja. Ova operacija je jednostavna jer je za konstrukciju tenzora potreban samo jedan argument.
Kvadrat broja konstruiran je s tf.sqrt(x) s x kao pokretnim brojem.
x = tf.constant([2.0], dtype = tf.float32) print(tf.sqrt(x))
Izlaz
Tensor("Sqrt:0", shape=(1,), dtype=float32)
Biljeลกka: Izlaz je vratio objekt tenzora, a ne rezultat kvadrata 2. U primjeru ispisujete definiciju tenzora, a ne stvarnu procjenu operacije. U sljedeฤem odjeljku nauฤit ฤete kako TensorFlow radi na izvrลกavanju operacija.
Slijedi popis ฤesto koriลกtenih operacija. Ideja je ista. Svaka operacija zahtijeva jedan ili viลกe argumenata.
- tf.add(a, b)
- tf.titlovitract(a, b)
- tf.multiply(a, b)
- tf.div(a, b)
- tf.pow(a, b)
- tf.exp(a)
- tf.sqrt(a)
Primjer
# Add tensor_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)
Code Objaลกnjenje
Napravite dva tenzora:
- jedan tenzor s 1 i 2
- jedan tenzor s 3 i 4
Zbrajate oba tenzora.
obavijest: da oba tenzora moraju imati isti oblik. Moลพete izvrลกiti mnoลพenje nad dva tenzora.
# Multiply tensor_multiply = tf.multiply(tensor_a, tensor_b) print(tensor_multiply)
Izlaz
Tensor("Mul:0", shape=(1, 2), dtype=int32)
Varijable
Do sada ste kreirali samo konstantne tenzore. Nije od velike koristi. Podaci uvijek stiลพu s razliฤitim vrijednostima, da biste to uhvatili, moลพete koristiti klasu Variable. Predstavljat ฤe ฤvor u kojem se vrijednosti uvijek mijenjaju.
Za izradu varijable 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. Optional If 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 nasumiฤne vrijednosti. TensorFlow prema zadanim postavkama vraฤa sluฤajnu vrijednost. Vi varijablu imenujete var
# Create a Variable
## Create 2 Randomized values
var = tf.get_variable("var", [1, 2])
print(var.shape)
Izlaz
(1, 2)
U drugom primjeru stvarate varijablu s jednim retkom i dva stupca. Morate upotrijebiti [1,2] za stvaranje dimenzije varijable
Poฤetne vrijednosti ovog tenzora su nula. Na primjer, kada trenirate model, morate imati poฤetne vrijednosti za izraฤunavanje teลพine znaฤajki. U nastavku ove poฤetne vrijednosti postavljate 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)
Moลพete proslijediti vrijednosti konstantnog tenzora u varijabli. Konstantni tenzor stvarate metodom tf.constant(). Ovaj tenzor koristite za inicijalizaciju varijable.
Prve vrijednosti varijable su 10, 20, 30 i 40. Novi tenzor ฤe imati oblik 2ร2.
# Create a 2x2 matrixtensor_const = tf.constant([[10, 20],
[30, 40]])
# Initialize the first value of the tensor equals to tensor_const
var_init_2 = tf.get_variable("var_init_2", dtype=tf.int32, initializer=tensor_const)
print(var_init_2.shape)
Izlaz
(2, 2)
ฤinovnik
Svrha ฤuvara mjesta je da dopuni tenzor. Rezervirano mjesto se koristi za pokretanje protoka podataka unutar tenzora. Da biste unijeli rezervirano mjesto, morate koristiti metodu feed_dict. Rezervirano mjesto bit ฤe uneseno samo unutar sesije.
U sljedeฤem primjeru vidjet ฤete kako stvoriti rezervirano mjesto metodom tf.placeholder. U sljedeฤoj ฤete sesiji nauฤiti staviti 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. Optional data_placeholder_a = tf.placeholder(tf.float32, name = "data_placeholder_a") print(data_placeholder_a)
Izlaz
Tensor("data_placeholder_a:0", dtype=float32)
Sjednica
TensorFlow radi oko 3 glavne komponente:
- Grafikon
- tenzor
- Sjednica
| Komponente | Opis |
|---|---|
| Grafikon | Graf je fundamentalan 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 te operacije, mogu apsorbirati ili stvoriti nove tenzore. |
| tenzor | Tenzor predstavlja podatke koji napreduju izmeฤu operacija. Prethodno ste vidjeli kako inicijalizirati tenzor. Razlika izmeฤu konstante i varijable je u tome ลกto ฤe se poฤetne vrijednosti varijable mijenjati tijekom vremena. |
| Sjednica | Sesija ฤe izvrลกiti operaciju iz grafikona. Da biste graf napunili vrijednostima tenzora, morate otvoriti sesiju. Unutar sesije morate pokrenuti operator za stvaranje izlaza. |
Grafikoni i sesije su neovisni. Moลพete pokrenuti sesiju i dobiti vrijednosti koje ฤete kasnije koristiti za daljnje izraฤune.
U donjem primjeru ฤete:
- Napravite dva tenzora
- Stvorite operaciju
- Otvorite sesiju
- Ispiลกite rezultat
Korak 1) Kreirate dva tenzora x i y
## Create, run and evaluate a session x = tf.constant([2]) y = tf.constant([4])
Korak 2) Operator stvarate mnoลพenjem x i y
## Create operator multiply = tf.multiply(x, y)
Korak 3) Otvarate sesiju. Sva izraฤunavanja dogodit ฤe se unutar sesije. Kada ste gotovi, trebate zatvoriti sesiju.
## Create a session to run the code sess = tf.Session()result_1 = sess.run(multiply) print(result_1) sess.close()
Izlaz
[8]
Code obrazloลพenje
- tf.Session(): Otvaranje sesije. Sve ฤe operacije teฤi unutar sesija
- run(multiply): izvrลกite operaciju stvorenu u koraku 2.
- print(result_1): Konaฤno, moลพete ispisati rezultat
- close(): Zatvori 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ลกenje operacije. To je ekvivalentno run(). ฤini kรดd ฤitljivijim.
Moลพete stvoriti sesiju i vidjeti vrijednosti unutar tenzora koje ste do sada stvorili.
## Check the tensors created before sess = 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 za inicijalizaciju 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 prije stvorili. Imajte na umu da morate koristiti run za procjenu tenzora
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 upotrijebiti rezervirano mjesto koje ste prije stvorili i dodati mu stvarnu vrijednost. Morate proslijediti podatke u metodu feed_dict.
Na primjer, uzet ฤete snagu 2 rezerviranog mjesta data_placeholder_a.
import numpy as np
power_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.
Code Objaลกnjenje
- import numpy kao np: Import knjiลพnica numpy za stvaranje podataka
- tf.pow(data_placeholder_a, 2): Kreirajte ops
- np.random.rand(1, 10): Stvorite nasumiฤni niz podataka
- feed_dict={data_placeholder_a: data}: Ubaci podatke u rezervirano mjesto
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 renderiranja operacije. Sva su izraฤunavanja predstavljena shemom tijeka podataka. Grafikon protoka podataka razvijen je kako bi se uoฤile ovisnosti podataka izmeฤu pojedinaฤnih operacija. Matematiฤka formula ili algoritam sastoji se od niza uzastopnih operacija. Grafikon je prikladan naฤin za vizualizaciju naฤina na koji su proraฤuni koordinirani.
Grafikon prikazuje a ฤvor i rub. ฤvor je prikaz operacije, tj. jedinica izraฤuna. Rub je tenzor, moลพe proizvesti novi tenzor ili potroลกiti ulazne podatke. Ovisi o ovisnosti izmeฤu pojedinih operacija.
Struktura grafa povezuje operacije (tj. ฤvorove) i naฤin na koji se te operacije dovode. Imajte na umu da grafikon ne prikazuje izlaz operacija, on samo pomaลพe vizualizirati vezu izmeฤu pojedinaฤnih operacija.
Pogledajmo primjer.
Zamislite da ลพelite procijeniti sljedeฤu funkciju:
TensorFlow ฤe stvoriti grafikon za izvrลกenje funkcije. Grafikon izgleda ovako:
Lako moลพete vidjeti put kojim ฤe tenzori doฤi do konaฤnog odrediลกta.
Na primjer, moลพete vidjeti da se operacija add ne moลพe izvrลกiti prije i . Grafikon objaลกnjava da ฤe:
- izraฤunati i:
- dodati 1) zajedno
- dodaj u 2)
- dodati 3) na
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
Code Objaลกnjenje
- x: Inicijalizirajte varijablu pod nazivom x s konstantnom vrijednoลกฤu 5
- z: Inicijalizirajte varijablu nazvanu z konstantnom vrijednoลกฤu 6
- c: Inicijalizirajte konstantni tenzor nazvan c konstantnom vrijednoลกฤu 5
- kvadrat: Inicijalizirajte konstantni tenzor koji se zove kvadrat s konstantnom vrijednoลกฤu 2
- f: Konstruirajte operator
U ovom primjeru odluฤili smo zadrลพati vrijednosti varijabli fiksnima. Takoฤer smo stvorili konstantni tenzor nazvan c koji je konstantni parametar u funkciji f. Zauzima fiksnu vrijednost 5. Na grafikonu moลพete vidjeti ovaj parametar u tenzoru koji se naziva konstanta.
Takoฤer smo konstruirali konstantni tenzor za potenciju u operatoru tf.pow(). Nije potrebno. Napravili smo to tako da moลพete vidjeti naziv tenzora na grafu. To je krug koji se zove kvadrat.
Iz grafikona moลพete razumjeti ลกto ฤe se dogoditi s tenzorima i kako mogu vratiti rezultat od 66.
Kod u nastavku procjenjuje funkciju u sesiji.
init = tf.global_variables_initializer() # prepare to initialize all variables
with tf.Session() as sess:
init.run() # Initialize x and y
function_result = f.eval()
print(function_result)
Izlaz
[66]
Rezime
TensorFlow radi oko:
- Grafikon: Raฤunalno okruลพenje koje sadrลพi operacije i tenzore
- Tenzori: Predstavlja podatke (ili vrijednosti) koji ฤe teฤi u grafikonu. To je rub u grafikonu
- sjednice: Dopusti izvoฤenje operacija
Napravite konstantni tenzor
| konstanta | 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.constant([ [[1, 2],[3, 4], [5, 6]] ], tf.int16) |
Stvorite operator
| Stvorite operator | Objekt |
|---|---|
| a + b | tf.add(a, b) |
| a*b | tf.multiply(a, b) |
Napravite varijabilni tenzor
| Stvorite varijablu | objekt |
|---|---|
| sluฤajna vrijednost | tf.get_variable(โvarโ, [1, 2]) |
| poฤetna prva vrijednost | tf.get_variable(โvar_init_2โ, dtype=tf.int32, initializer=[ [1, 2], [3, 4] ]) |
Otvorite sesiju
| Sjednica | objekt |
|---|---|
| Stvorite sesiju | tf.Session() |
| Pokrenite sesiju | tf.Session.run() |
| Procijenite tenzor | naziv_varijable.eval() |
| Zatvorite sesiju | sess.close() |
| Sesija po bloku | s tf.Session() kao sess: |


