Che cos'รจ un tensore in TensorFlow? Forma, tipo e OperaTors

โšก Riepilogo intelligente

I tensori sono array n-dimensionali che ogni calcolo di TensorFlow legge e scrive, ognuno dei quali porta con sรฉ un nome, una forma e un tipo di dati. Questa procedura guidata crea costanti, variabili, segnaposto e operatori, per poi valutarli all'interno di una sessione.

  • ๐Ÿ”˜ Tre proprietร : Ogni oggetto tf.Tensor espone un nome univoco, una forma e un tipo di dati.
  • โ˜‘๏ธ Quattro tipi di tensori: tf.constant, tf.Variable, tf.placeholder e tf.SparseTensor coprono l'API classica.
  • โœ… Il rango corrisponde all'annidamento: Ogni coppia di parentesi aggiuntive aggiunge una dimensione alla tupla della forma.
  • ๐Ÿงช Valutazione differita: La stampa di un'operazione ne mostra la definizione, non il valore, finchรฉ una sessione non la esegue.
  • ๏ธ Grafico e sessione: Il grafico memorizza le operazioni mentre la sessione le esegue e restituisce i risultati.
  • โš ๏ธ Nota sulla versione: Le sessioni e i segnaposto appartengono a TensorFlow 1.x e attualmente risiedono sotto tf.compat.v1.

Nozioni di base di TensorFlow: tensore, forma, tipo, sessioni e OperaTors

Cos'รจ un tensore?

Il nome TensorFlow deriva direttamente dal suo oggetto principale: il tensore. In TensorFlow, ogni calcolo coinvolge i tensori. Un tensore รจ un vettore o una matrice di n dimensioni che rappresenta tutti i tipi di dati. Tutti i valori in un tensore contengono un tipo di dati identico con una forma nota (o parzialmente nota), e la forma dei dati รจ la dimensionalitร  della matrice o dell'array.

Un tensore puรฒ derivare dai dati di input o dal risultato di un calcolo. In TensorFlow, tutte le operazioni vengono eseguite all'interno di un grafo. Il grafo รจ un insieme di calcoli che si susseguono. Ogni operazione รจ chiamata nodo operativo (op node) e i nodi sono collegati tra loro.

Il grafico illustra le operazioni e le connessioni tra i nodi. Tuttavia, non visualizza i valori. Il collegamento tra i nodi rappresenta il tensore, ovvero un modo per popolare l'operazione con i dati.

Nell'apprendimento automatico, i modelli vengono alimentati con un elenco di oggetti chiamati vettori di caratteristiche. Un vettore di caratteristiche puรฒ essere di qualsiasi tipo di dato ed รจ solitamente l'input principale che popola un tensore. Questi valori fluiscono in un nodo operativo attraverso il tensore e il risultato di tale operazione crea un nuovo tensore, che a sua volta viene utilizzato in una nuova operazione. Tutte queste operazioni possono essere visualizzate nel grafico.

Rappresentazione di un tensore

In TensorFlow, un tensore รจ una collezione di vettori di caratteristiche (ovvero un array) di n dimensioni. Ad esempio, se abbiamo una matrice 2ร—3 con valori da 1 a 6, la scriviamo come la matrice mostrata di seguito:

Matrice due per tre contenente i valori da uno a sei in notazione tra parentesi.

TensorFlow rappresenta questa matrice come:

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

Se creiamo una matrice tridimensionale con valori da 1 a 8, gli stessi dati vengono rappresentati come una scatola con due facce sovrapposte:

Tensore tridimensionale rappresentato come una scatola con i valori da uno a otto su due facce sovrapposte.

TensorFlow rappresenta questa matrice come:

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

Nota: un tensore puรฒ essere rappresentato con uno scalare oppure puรฒ avere una forma con piรน di tre dimensioni. รˆ semplicemente piรน difficile visualizzare i livelli di dimensione superiori.

Tipi di tensore

In TensorFlow, tutti i calcoli passano attraverso uno o piรน tensori. Un tf.Tensor รจ un oggetto con tre proprietร :

  • Un'etichetta univoca (nome)
  • Una dimensione (forma)
  • Un tipo di dati (dtype)

Ogni operazione che esegui con TensorFlow implica la manipolazione di un tensore. Esistono quattro tipi principali di tensori che puoi creare:

  • tf.Variable
  • tf.constant
  • tf.placeholder
  • tf.SparseTensor

In questo tutorial imparerai come creare un tf.constant e tf.Variable.

Un punto da tenere a mente prima di eseguire il codice: questo tutorial segue l'API originale di TensorFlow 1.x, in cui un grafico viene prima costruito ed eseguito successivamente all'interno di una sessione. TensorFlow 2 viene eseguito in modalitร  eager per impostazione predefinita, quindi molti dei simboli seguenti sono stati spostati o rimossi. Ognuno di essi รจ comunque raggiungibile tramite il tf.compat.v1 namespace, e la tabella associa ciascuno alla sua controparte moderna.

Simbolo di TensorFlow 1.x Equivalente a TensorFlow 2
tf.placeholder() Non richiesto. L'esecuzione immediata accetta Python o valori NumPy direttamente e un tf.function Il parametro svolge lo stesso ruolo nella modalitร  grafica.
tf.Session() and sess.run() Chiama l'operazione direttamente e leggi il risultato oppure racchiudi il calcolo in tf.function.
tf.get_variable() tf.Variable(), con semplicitร  Python oggetti tracre le variabili invece delle collezioni.
tf.global_variables_initializer() Non richiesto. A tf.Variable viene inizializzato nel momento della sua creazione.
tf.div() tf.divide(). Nota anche che il sottotraction op รจ scritto tf.subtract()non, tf.substract().

Prima di iniziare il tutorial, assicurati di attivare l'ambiente conda in cui รจ installato TensorFlow. Questo ambiente si chiama hello-tf.

Per macOS gli utenti:

source activate hello-tf

Per Windows gli utenti:

activate hello-tf

Una volta completata questa operazione, sarete pronti per importare TensorFlow.

# Import tf
import tensorflow as tf

Crea un tensore di n-dimensione

Inizi con la creazione di un tensore con una dimensione, vale a dire uno scalare.

Per creare un tensore, puoi usare tf.constant() come mostrato nell'esempio di forma del tensore TensorFlow riportato di seguito:

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`

Per creare un tensore di dimensione 0, eseguire il seguente codice.

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

Uscita

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

Le tre parti di tale output corrispondono alle tre proprietร  del tensore, come chiarisce la versione annotata qui sotto.

L'output del tensore รจ annotato con didascalie che indicano il nome, la forma e il tipo di dati.

Puoi anche dare al tensore un nome tuo con il name discussione.

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

Uscita

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

Ciascun tensore viene visualizzato tramite il suo nome. Ogni oggetto tensore รจ definito da attributi quali un'etichetta univoca (nome), una dimensione (forma) e un tipo di dati TensorFlow (dtype).

รˆ possibile definire un tensore con valori decimali o con una stringa modificando il tipo di dati.

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

Uscita

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

Un tensore di dimensione 1 puรฒ essere creato nel modo seguente:

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

Uscita

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

Come si puรฒ notare, la forma di TensorFlow รจ composta da una sola colonna.

Per creare un array di tensori con 2 dimensioni, รจ necessario chiudere le parentesi dopo ogni riga. Consulta l'esempio di forma del tensore qui sotto.

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

Uscita

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

La matrice ha 2 righe e 2 colonne riempite con i valori 1, 2, 3 e 4.

Si costruisce una matrice a 3 dimensioni aggiungendo un ulteriore livello di parentesi.

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

Uscita

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

Il risultato corrisponde al diagramma tridimensionale a scatola mostrato in precedenza in questo tutorial.

Forma del tensore

Quando stampi un tensore, TensorFlow deduce la forma. Tuttavia, puoi leggere la forma direttamente con TensorFlow shape proprietร .

Di seguito, costruisci una matrice riempita con i numeri da 10 a 15 e controlli la forma di m_shape.

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

Uscita

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

La matrice ha 3 righe e 2 colonne.

TensorFlow dispone di comandi utili per creare un vettore o una matrice riempita con 0 o 1. Ad esempio, se desideri creare un tensore 1-D con una forma specifica di 10, riempita con 0, puoi eseguire il codice seguente:

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

Uscita

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

La proprietร  funziona anche per una matrice. Qui, si crea una matrice 10ร—10 riempita con 1.

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

Uscita

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

รˆ possibile utilizzare la forma di una data matrice per creare un vettore di uno. La matrice m_shape ha dimensioni 3ร—2, quindi il seguente codice crea un tensore con 3 righe riempite di uno:

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

Uscita

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

Se passi il valore 1 tra parentesi, costruisci un vettore di uno pari al numero di colonne della matrice m_shape.

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

Uscita

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

Infine, รจ possibile creare una matrice 3ร—2 riempita interamente con numeri uno.

print(tf.ones(m_shape.shape))

Uscita

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

Tipo di dati

La seconda proprietร  di un tensore รจ il tipo di dati. Un tensore puรฒ contenere un solo tipo di dati alla volta e puoi leggere quel tipo con il dtype proprietร .

print(m_shape.dtype)

Uscita

<dtype: &#x27;int32'>

In alcune occasioni, si desidera modificare il tipo di dati. In TensorFlow, ciรฒ รจ possibile con il tf.cast metodo.

Esempio

Di seguito, un tensore float viene convertito in un intero con il cast metodo.

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

Uscita

<dtype: &#x27;float32'>
<dtype: &#x27;int32'>

TensorFlow sceglie automaticamente il tipo di dati quando l'argomento non viene specificato durante la creazione del tensore. TensorFlow ipotizza il tipo di dati piรน probabile: se, ad esempio, si passa del testo, deduce che si tratti di una stringa.

Creazione Operator

Alcuni utili TensorFlow OperaTors

Sai come creare un tensore con TensorFlow. รˆ tempo di imparare come eseguire operazioni matematiche.

TensorFlow include tutte le operazioni di base. Puoi iniziare con una semplice e utilizzare un metodo di TensorFlow per calcolare la radice quadrata di un numero. Questa operazione รจ semplice perchรฉ richiede un solo argomento per costruire il tensore.

La radice quadrata di un numero รจ costruita con tf.sqrt(x), dove x รจ un numero in virgola mobile.

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

Uscita

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

Nota: l'output ha restituito un oggetto tensore e non la radice quadrata di 2. In questo esempio, viene stampata la definizione del tensore e non la valutazione effettiva dell'operazione. Nella sezione Sessione qui sotto, imparerai come TensorFlow esegue le operazioni.

Di seguito รจ riportato un elenco delle operazioni piรน comuni. Il concetto รจ sempre lo stesso: ogni operazione richiede uno o piรน argomenti.

  • tf.add(a, b)
  • tf.subtract(a, b)
  • tf.multiply(a, b)
  • tf.divide(a, b)
  • tf.pow(a, b)
  • tf.exp(a)
  • tf.sqrt(a)

Esempio

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

Uscita

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

Code Spiegazione

Crea due tensori:

  • un tensore con 1 e 2
  • un tensore con 3 e 4

Sommi entrambi i tensori.

Si noti che entrambi i tensori devono avere la stessa forma. รˆ anche possibile eseguire una moltiplicazione tra i due tensori.

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

Uscita

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

Variabili

Finora hai creato solo tensori costanti, che di per sรฉ hanno un'utilitร  limitata. I dati arrivano sempre con valori diversi e per rappresentarli puoi usare la classe Variable. Una variabile rappresenta un nodo i cui valori cambiano nel tempo.

Per creare una variabile, puoi usare tf.get_variable() metodo.

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.

Ad esempio, il codice seguente crea una variabile bidimensionale con due valori casuali. Per impostazione predefinita, TensorFlow restituisce un valore casuale. Si assegna alla variabile il nome var.

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

Uscita

(1, 2)

In questo esempio, si crea una variabile con una riga e due colonne, quindi si passa [1, 2] come dimensione della variabile.

I valori iniziali di un tensore possono anche essere zero. Quando si addestra un modello, ad esempio, sono necessari valori iniziali prima di calcolare il peso delle caratteristiche. Di seguito, si impostano questi valori iniziali a zero.

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

Uscita

(1, 2)

รˆ anche possibile passare i valori di un tensore costante a una variabile. Si crea un tensore costante con il metodo tf.constant() e utilizzare quel tensore per inizializzare la variabile.

I primi valori della variabile sono 10, 20, 30 e 40. Il nuovo tensore ha una forma 2ร—2.

# Create a 2x2 matrix
tensor_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)

Uscita

(2, 2)

segnaposto

Un placeholder ha lo scopo di alimentare il tensore. Un placeholder inizializza i dati che fluiranno all'interno dei tensori. Per fornire un placeholder, si utilizza il feed_dict argomento, e il segnaposto viene alimentato solo all'interno di una sessione.

Nel prossimo esempio, vedrai come creare un segnaposto con il metodo tf.placeholderNella sezione Sessione, imparerai ad alimentare un segnaposto con un valore tensoriale effettivo.

La sintassi รจ:

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)

Uscita

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

Sessione

TensorFlow funziona attorno a 3 componenti principali:

  • Grafico
  • tensore
  • Sessione
Componenti Descrizione
Grafico Il grafo รจ fondamentale in TensorFlow. Tutte le operazioni matematiche (op) vengono eseguite all'interno di un grafo. Si puรฒ immaginare un grafo come un progetto in cui viene svolta ogni operazione. I nodi rappresentano queste operazioni e possono assorbire o creare nuovi tensori.
tensore Un tensore rappresenta i dati che progrediscono tra le operazioni. Hai giร  visto come inizializzare un tensore. La differenza tra una costante e una variabile รจ che i valori iniziali di una variabile cambiano nel tempo.
Sessione Una sessione esegue le operazioni sul grafo. Per alimentare il grafo con i valori di un tensore, รจ necessario aprire una sessione. All'interno di una sessione, รจ necessario eseguire un operatore per creare un output.

Grafici e sessioni sono indipendenti. รˆ possibile eseguire una sessione e conservare i valori per ulteriori calcoli in seguito.

Nell'esempio seguente, dovrai:

  • Crea due tensori
  • Creare un'operazione
  • Apri una sessione
  • Stampa il risultato

Passaggio 1) Si creano due tensori x e y

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

Passaggio 2) Si crea l'operatore moltiplicando x e y

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

Passaggio 3) Apri una sessione. Tutti i calcoli avvengono all'interno della sessione e, al termine, devi chiuderla.

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

Uscita

[8]

Code spiegazione

  • tf.Session(): Apri una sessione. Tutte le operazioni si svolgono all'interno della sessione
  • run(multiply): eseguire l'operazione creata nel passaggio 2
  • print(result_1)Infine, puoi stampare il risultato
  • close(): Chiudi la sessione

Il risultato mostra 8, che รจ la moltiplicazione di xey.

Un altro modo per creare una sessione รจ all'interno di un blocco. Il vantaggio รจ che la sessione viene chiusa automaticamente.

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

Uscita

[8]

Nel contesto di una sessione, รจ possibile utilizzare il eval() metodo per eseguire l'operazione. รˆ equivalente a run() e rende il codice piรน leggibile.

Puoi creare una sessione e vedere i valori all'interno dei tensori che hai creato finora.

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

Uscita

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

Le variabili sono vuote per impostazione predefinita, anche dopo aver creato il tensore. รˆ necessario inizializzare una variabile prima di poterla utilizzare. L'oggetto tf.global_variables_initializer() viene chiamata per inizializzare i valori di tutte le variabili contemporaneamente, il che รจ utile prima di addestrare un modello.

รˆ possibile verificare i valori delle variabili create in precedenza. Si noti che รจ necessario utilizzare il comando `run` per valutare il tensore.

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

Uscita

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

Puoi usare il segnaposto creato in precedenza e alimentarlo con un valore effettivo. Devi passare i dati nel feed_dict discussione.

Ad esempio, prenderai la potenza di 2 del segnaposto 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 Spiegazione

  • import numpy as np: Importa il file NumPy libreria per creare i dati
  • tf.pow(data_placeholder_a, 2): Creare le operazioni
  • np.random.rand(1, 10): Crea un array di dati casuale
  • feed_dict={data_placeholder_a: data}: Inserisci i dati nel segnaposto

Uscita

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

Grafico

TensorFlow rappresenta ogni operazione con uno schema di flusso di dati. Il grafico del flusso di dati รจ stato progettato per mostrare le dipendenze tra le singole operazioni. Una formula matematica o un algoritmo รจ composto da una serie di operazioni successive e un grafico รจ un modo pratico per visualizzare come questi calcoli sono coordinati.

Il grafico mostra nodi e archi. Un nodo rappresenta un'operazione, ovvero l'unitร  di calcolo. Un arco rappresenta il tensore: puรฒ produrre un nuovo tensore o consumare i dati di input, a seconda delle dipendenze tra le singole operazioni.

La struttura del grafico collega le operazioni (ovvero i nodi) e mostra come ciascuna di esse viene alimentata. Si noti che il grafico non visualizza l'output delle operazioni; serve solo a visualizzare le connessioni tra di esse.

Vediamo un esempio. Immaginiamo di voler valutare la seguente funzione:

La formula f di x e z รจ uguale a x per z piรน x al quadrato piรน z piรน cinque

TensorFlow crea un grafo per eseguire la funzione. Il grafo ha questo aspetto:

Grafico TensorFlow con nodi variabili X e Z che alimentano le operazioni Mul, Pow e tre addizioni.

Puoi facilmente vedere il percorso che i tensori seguiranno per raggiungere la destinazione finale.

Per esempio, la add il nodo non puรฒ essere eseguito prima di entrambi Mul and Pow hanno prodotto i loro risultati. Il grafico mostra che TensorFlow:

  1. calcolare xยทz nel Mul nodo e xยฒ nel Pow nodo
  2. sommare questi due risultati nel add nodo
  3. aggiungi z a quella somma nel add_1 nodo
  4. aggiungere la costante 5 nel add_2 nodo
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 Spiegazione

  • x: inizializza una variabile chiamata x con un valore costante pari a 5
  • z: inizializza una variabile chiamata z con un valore costante pari a 6
  • c: inizializza un tensore costante chiamato c con un valore costante pari a 5
  • quadrato: inizializza un tensore costante chiamato quadrato con un valore costante pari a 2
  • f: Costruisci l'operatore

In questo esempio, i valori delle variabili sono mantenuti fissi. Il tensore costante c รจ il parametro costante nella funzione f e assume un valore fisso di 5; nel grafico รจ possibile vedere questo parametro nel tensore chiamato costante.

รˆ stato inoltre creato un tensore costante per la potenza nell'operatore tf.pow()Non รจ necessario, ma significa che l'esponente appare nel grafico come il cerchio chiamato quadrato.

Dal grafico si puรฒ seguire l'evoluzione dei tensori e capire perchรฉ la funzione restituisce 66: 5 ร— 6 piรน 5ยฒ piรน 6 piรน 5 รจ uguale a 66.

Il codice seguente valuta la funzione all'interno di una sessione.

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)

Uscita

[66]

Nozioni di base di TensorFlow - Guida rapida

Le quattro tabelle seguenti raccolgono tutti i comandi utilizzati in questo tutorial, in modo da poterli consultare senza dover scorrere indietro tra gli esempi.

Crea un tensore costante

costante oggetto
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)

Creare un operatore

Creare un operatore Oggetto
a + b tf.add(a, b)
a * b tf.multiply(a, b)

Creare un tensore variabile

Crea una variabile oggetto
valore randomizzato tf.get_variable("var", [1, 2])
primo valore inizializzato tf.get_variable("var_init_2", dtype=tf.int32, initializer=[ [1, 2], [3, 4] ])

Apri una sessione

Sessione oggetto
Crea una sessione tf.Session()
Esegui una sessione tf.Session.run()
Valutare un tensore variable_name.eval()
Chiudere una sessione sess.close()
Sessione per blocco with tf.Session() as sess:

DOMANDE FREQUENTI

Il suffisso indica l'indice di output dell'operazione che ha prodotto il tensore. Const:0 indica il primo output dell'operazione denominata Const. Le operazioni con piรน output sono numerate :0, :1 e cosรฌ via.

In modalitร  eager execution, chiama il metodo numpy() del tensore oppure passalo a np.array(). Nello stile grafico-e-sessione mostrato qui, il valore restituito da sess.run() รจ giร  un NumPy Vettore.

Un tensore irregolare puรฒ contenere righe di lunghezze diverse, cosa che un tensore normale non puรฒ fare. Viene creato con `tf.ragged.constant` ed รจ adatto a dati a lunghezza variabile come le frasi, dove riempire ogni riga con una larghezza uniforme comporterebbe uno spreco di memoria.

TensorFlow applica il broadcasting: confronta le forme a partire dalla dimensione finale e allunga qualsiasi asse di lunghezza uno per farlo corrispondere. Le forme che non possono essere allineate in questo modo generano un InvalidArgumentError invece di tentare una soluzione a caso.

TensorFlow posiziona automaticamente le operazioni su una GPU visibile. Per forzare l'utilizzo di un dispositivo, racchiudere il codice in un blocco `tf.device('/GPU:0')`. Utilizzare prima `tf.config.list_physical_devices('GPU')` per verificare che il dispositivo sia effettivamente rilevato.

Entrambi memorizzano dati n-dimensionali tipizzati, ma un tensore รจ immutabile, puรฒ risiedere su una GPU o TPU e registra le operazioni applicate ad esso, consentendo il calcolo dei gradienti. Un array NumPy non fa nessuna di queste tre cose.

I controllori di tipo statici e le librerie di annotazione delle forme confrontano le forme dichiarate con le operazioni nel codice e segnalano le discrepanze prima dell'avvio dell'esecuzione. Gli assistenti dell'editor mostrano gli stessi avvisi in linea, eliminando la maggior parte dei tentativi ed errori.ping.

Copilota GitHub suggerisce di riscrivere rapidamente, con esecuzione immediata, il codice di sessione e i placeholder. Verifica ogni suggerimento, perchรฉ spesso propone shim tf.compat.v1 laddove esiste un'autentica alternativa per TensorFlow 2.

Riassumi questo post con: