Qu'est-ce qu'un tenseur dans TensorFlow ? Forme, type et Operajeudi

โšก Rรฉsumรฉ intelligent

Les tenseurs sont des tableaux n-dimensionnels que chaque calcul TensorFlow lit et รฉcrit ; chacun possรจde un nom, une forme et un type de donnรฉes. Ce guide explique comment crรฉer des constantes, des variables, des espaces rรฉservรฉs et des opรฉrateurs, puis comment les รฉvaluer au sein d'une session.

  • (I.e. Trois propriรฉtรฉs : Chaque objet tf.Tensor expose un nom unique, une forme et un type de donnรฉes.
  • โ˜‘๏ธ Quatre types de tenseurs : tf.constant, tf.Variable, tf.placeholder et tf.SparseTensor couvrent l'API classique.
  • โœ… Rang = imbrication : Chaque paire de parenthรจses supplรฉmentaire ajoute une dimension au triplet de formes.
  • ๐Ÿงช ร‰valuation diffรฉrรฉe : L'affichage d'une opรฉration montre sa dรฉfinition, et non sa valeur, tant qu'une session ne l'exรฉcute pas.
  • ๏ธ Graphique et session : Le graphe stocke les opรฉrations pendant que la session les exรฉcute et renvoie les rรฉsultats.
  • โš ๏ธ Note de version : Les sessions et les espaces rรฉservรฉs appartiennent ร  TensorFlow 1.x et sont actuellement hรฉbergรฉs sous tf.compat.v1.

Principes de base de TensorFlow : tenseur, forme, type, sessions et Operajeudi

Qu'est-ce qu'un tenseur ?

Le nom du blog TensorFlow Il est directement dรฉrivรฉ de son objet fondamental : le tenseur. Dans TensorFlow, chaque calcul fait intervenir des tenseurs. Un tenseur est un vecteur ou une matrice ร  n dimensions qui reprรฉsente tous les types de donnรฉes. Toutes les valeurs d'un tenseur ont un type de donnรฉes identique et une forme connue (ou partiellement connue), cette forme correspondant ร  la dimensionnalitรฉ de la matrice ou du tableau.

Un tenseur peut provenir des donnรฉes d'entrรฉe ou du rรฉsultat d'un calcul. Dans TensorFlow, toutes les opรฉrations sont effectuรฉes au sein d'un graphe. Ce graphe reprรฉsente l'ensemble des calculs qui s'exรฉcutent successivement. Chaque opรฉration est appelรฉe un nล“ud d'opรฉration, et les nล“uds sont interconnectรฉs.

Le graphique illustre les opรฉrations et les connexions entre les nล“uds. Cependant, il n'affiche pas les valeurs. L'arรชte entre les nล“uds reprรฉsente le tenseur, c'est-ร -dire un moyen d'alimenter l'opรฉration avec des donnรฉes.

En apprentissage automatique, les modรจles sont alimentรฉs par une liste d'objets appelรฉs vecteurs de caractรฉristiques. Un vecteur de caractรฉristiques peut รชtre de n'importe quel type de donnรฉes et constitue gรฉnรฉralement l'entrรฉe principale qui alimente un tenseur. Ces valeurs transitent par le tenseur vers un nล“ud d'opรฉration, et le rรฉsultat de cette opรฉration crรฉe un nouveau tenseur, qui est ร  son tour utilisรฉ dans une nouvelle opรฉration. Toutes ces opรฉrations sont visibles dans le graphe.

Reprรฉsentation d'un tenseur

Dans TensorFlow, un tenseur est un ensemble de vecteurs de caractรฉristiques (c'est-ร -dire un tableau) de n dimensions. Par exemple, si nous avons une matrice 2ร—3 avec des valeurs de 1 ร  6, nous l'รฉcrivons comme la matrice ci-dessous :

Matrice 2x3 contenant les valeurs de 1 ร  6 entre parenthรจses

TensorFlow reprรฉsente cette matrice comme :

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

Si l'on crรฉe une matrice tridimensionnelle avec des valeurs allant de 1 ร  8, les mรชmes donnรฉes sont reprรฉsentรฉes par une boรฎte ร  deux faces superposรฉes :

Tenseur tridimensionnel reprรฉsentรฉ sous forme de boรฎte avec les valeurs de un ร  huit sur deux faces superposรฉes

TensorFlow reprรฉsente cette matrice comme :

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

Remarque : Un tenseur peut รชtre reprรฉsentรฉ par un scalaire ou avoir une forme ร  plus de trois dimensions. Il est simplement plus difficile de visualiser les dimensions supรฉrieures.

Types de tenseur

Dans TensorFlow, tous les calculs transitent par un ou plusieurs tenseurs. Un tf.Tensor est un objet possรฉdant trois propriรฉtรฉs :

  • Une รฉtiquette unique (nom)
  • Une dimension (forme)
  • Un type de donnรฉes (dtype)

Chaque opรฉration effectuรฉe avec TensorFlow implique la manipulation d'un tenseur. Il existe quatre principaux types de tenseurs que vous pouvez crรฉer :

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

Dans ce tutoriel, vous apprendrez comment crรฉer un tf.constant , lโ€™aspect รฉconomique tf.Variable.

Un point important ร  retenir avant d'exรฉcuter le code : ce tutoriel suit l'API TensorFlow 1.x d'origine, oรน un graphe est d'abord construit puis exรฉcutรฉ ultรฉrieurement au sein d'une session. TensorFlow 2 s'exรฉcute par dรฉfaut de maniรจre immรฉdiate ; par consรฉquent, plusieurs symboles ci-dessous ont รฉtรฉ dรฉplacรฉs ou supprimรฉs. Ils restent nรฉanmoins tous accessibles viaโ€ฆ tf.compat.v1 l'espace de noms, et le tableau associe chaque nom ร  son รฉquivalent moderne.

Symbole TensorFlow 1.x ร‰quivalent ร  TensorFlow 2
tf.placeholder() Non requis. L'exรฉcution immรฉdiate accepte Python ou directement des valeurs NumPy, et un tf.function Ce paramรจtre joue le mรชme rรดle en mode graphique.
tf.Session() et sess.run() Appelez directement l'opรฉration et lisez le rรฉsultat, ou encapsulez le calcul dans tf.function.
tf.get_variable() tf.Variable(), avec simple Python objets tracUtilisez les variables plutรดt que les collections.
tf.global_variables_initializer() Non requis. A tf.Variable est initialisรฉe au moment de sa crรฉation.
tf.div() tf.divide()Notez รฉgalement que le soustraction op s'รฉcrit tf.subtract(), Pas tf.substract().

Avant de suivre le tutoriel, assurez-vous d'activer l'environnement conda sur lequel TensorFlow est installรฉ. Cet environnement se nomme hello-tf.

Pour macOS utilisateurs:

source activate hello-tf

Pour Windows utilisateurs:

activate hello-tf

Une fois cela fait, vous รชtes prรชt ร  importer TensorFlow.

# Import tf
import tensorflow as tf

Crรฉer un tenseur de n-dimension

Vous commencez par la crรฉation d'un tenseur ร  une dimension, ร  savoir un scalaire.

Pour crรฉer un tenseur, vous pouvez utiliser tf.constant() comme illustrรฉ dans l'exemple de forme de tenseur TensorFlow ci-dessous :

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`

Pour crรฉer un tenseur de dimension 0, exรฉcutez le code suivant.

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

Sortie

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

Les trois parties de cette sortie correspondent aux trois propriรฉtรฉs du tenseur, comme le montre clairement la version annotรฉe ci-dessous.

Sortie tensorielle annotรฉe avec des lรฉgendes indiquant le nom, la forme et le type de donnรฉes

Vous pouvez รฉgalement donner au tenseur un nom personnalisรฉ avec le name argument.

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

Sortie

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

Chaque tenseur est affichรฉ par son nom. Chaque objet tenseur est dรฉfini par des attributs tels qu'une รฉtiquette unique (nom), une dimension (forme) et un type de donnรฉes TensorFlow (dtype).

Vous pouvez dรฉfinir un tenseur avec des valeurs dรฉcimales ou avec une chaรฎne en changeant le type de donnรฉes.

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

Sortie

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

Un tenseur de dimension 1 peut รชtre crรฉรฉ comme suit :

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

Sortie

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

Vous pouvez constater que la forme TensorFlow est composรฉe d'une seule colonne.

Pour crรฉer un tableau de tenseurs ร  deux dimensions, vous devez fermer les crochets aprรจs chaque ligne. Consultez l'exemple de forme de tenseur ci-dessous.

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

Sortie

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

La matrice comporte 2 lignes et 2 colonnes remplies des valeurs 1, 2, 3 et 4.

On construit une matrice ร  3 dimensions en ajoutant un niveau supplรฉmentaire de parenthรจses.

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

Sortie

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

Le rรฉsultat correspond au diagramme tridimensionnel prรฉsentรฉ prรฉcรฉdemment dans ce tutoriel.

Forme du tenseur

Lorsque vous affichez un tenseur, TensorFlow en dรฉduit la forme. Cependant, vous pouvez lire directement cette forme avec TensorFlow. shape propriรฉtรฉ.

Ci-dessous, vous construisez une matrice remplie des nombres de 10 ร  15 et vous vรฉrifiez la forme de m_shape.

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

Sortie

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

La matrice comporte 3 lignes et 2 colonnes.

TensorFlow dispose de commandes utiles pour crรฉer un vecteur ou une matrice remplie de 0 ou 1. Par exemple, si vous souhaitez crรฉer un tenseur 1D avec une forme spรฉcifique de 10, rempli de 0, vous pouvez exรฉcuter le code ci-dessous :

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

Sortie

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

Cette propriรฉtรฉ s'applique รฉgalement aux matrices. Ici, vous crรฉez une matrice 10ร—10 remplie de 1.

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

Sortie

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

Vous pouvez utiliser la forme d'une matrice donnรฉe pour crรฉer un vecteur de uns. La matrice m_shape Il possรจde des dimensions de 3ร—2, donc le code suivant crรฉe un tenseur avec 3 lignes remplies de 1 :

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

Sortie

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

Si vous passez la valeur 1 entre parenthรจses, vous construisez un vecteur de 1 รฉgal au nombre de colonnes de la matrice. m_shape.

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

Sortie

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

Enfin, vous pouvez crรฉer une matrice 3ร—2 entiรจrement remplie de 1.

print(tf.ones(m_shape.shape))

Sortie

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

Type de donnรฉes

La deuxiรจme propriรฉtรฉ d'un tenseur est son type de donnรฉes. Un tenseur ne peut contenir qu'un seul type de donnรฉes ร  la fois, et vous pouvez lire ce type avecโ€ฆ dtype propriรฉtรฉ.

print(m_shape.dtype)

Sortie

<dtype: &#x27;int32'>

Dans certains cas, vous souhaitez modifier le type de donnรฉes. Avec TensorFlow, c'est possible grรขce ร โ€ฆ tf.cast mรฉthode.

Exemple

Ci-dessous, un tenseur flottant est converti en entier avec le cast mรฉthode.

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

Sortie

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

TensorFlow choisit automatiquement le type de donnรฉes lorsque l'argument n'est pas spรฉcifiรฉ lors de la crรฉation du tenseur. TensorFlow devine le type de donnรฉes le plus probable : si vous fournissez du texte, par exemple, il s'agit d'une chaรฎne de caractรจres.

Nos Boissons Operator

Quelques fonctionnalitรฉs utiles de TensorFlow Operajeudi

Vous savez crรฉer un tenseur avec TensorFlow. Il est temps d'apprendre ร  effectuer des opรฉrations mathรฉmatiques.

TensorFlow contient toutes les opรฉrations de base. Vous pouvez commencer par une opรฉration simple et utiliser une mรฉthode TensorFlow pour calculer la racine carrรฉe d'un nombre. Cette opรฉration est simple car un seul argument est nรฉcessaire pour construire le tenseur.

La racine carrรฉe d'un nombre est construite avec tf.sqrt(x), avec x comme nombre ร  virgule flottante.

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

Sortie

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

Remarque : La sortie a renvoyรฉ un objet tenseur et non la racine carrรฉe de 2. Dans cet exemple, vous affichez la dรฉfinition du tenseur et non le rรฉsultat de lโ€™opรฉration. La section ยซ Session ยป ci-dessous explique comment TensorFlow exรฉcute les opรฉrations.

Voici une liste des opรฉrations les plus courantes. Le principe est le mรชme : chaque opรฉration nรฉcessite un ou plusieurs arguments.

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

Exemple

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

Sortie

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

Code Explication

Crรฉez deux tenseurs :

  • un tenseur avec 1 et 2
  • un tenseur avec 3 et 4

Vous additionnez les deux tenseurs.

Notez que les deux tenseurs doivent avoir la mรชme forme. Vous pouvez รฉgalement effectuer une multiplication sur les deux tenseurs.

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

Sortie

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

Variables

Jusqu'ร  prรฉsent, vous n'avez crรฉรฉ que des tenseurs constants, ce qui est d'une utilitรฉ limitรฉe. Les donnรฉes arrivent toujours avec des valeurs diffรฉrentes ; pour les reprรฉsenter, vous pouvez utiliser la classe Variable. Une variable reprรฉsente un nล“ud dont les valeurs รฉvoluent au fil du temps.

Pour crรฉer une variable, vous pouvez utiliser le tf.get_variable() mรฉthode.

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.

Par exemple, le code ci-dessous crรฉe une variable bidimensionnelle avec deux valeurs alรฉatoires. Par dรฉfaut, TensorFlow renvoie une valeur alรฉatoire. Vous nommez la variable var.

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

Sortie

(1, 2)

Dans cet exemple, vous crรฉez une variable avec une ligne et deux colonnes, vous passez donc [1, 2] comme dimension de la variable.

Les valeurs initiales d'un tenseur peuvent รฉgalement รชtre nulles. Lors de l'entraรฎnement d'un modรจle, par exemple, il est nรฉcessaire de dรฉfinir des valeurs initiales avant de calculer le poids des caractรฉristiques. Ci-dessous, ces valeurs initiales sont initialisรฉes ร  zรฉro.

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

Sortie

(1, 2)

Vous pouvez รฉgalement affecter les valeurs d'un tenseur constant ร  une variable. Vous crรฉez un tenseur constant avec la mรฉthode tf.constant() et utilisez ce tenseur pour initialiser la variable.

Les premiรจres valeurs de la variable sont 10, 20, 30 et 40. Le nouveau tenseur a une forme de 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)

Sortie

(2, 2)

placeholder

Un espace rรฉservรฉ sert ร  alimenter le tenseur. Il initialise les donnรฉes qui seront stockรฉes dans les tenseurs. Pour fournir un espace rรฉservรฉ, vous utilisezโ€ฆ feed_dict argument, et l'espace rรฉservรฉ n'est fourni qu'au sein d'une session.

Dans l'exemple suivant, vous verrez comment crรฉer un espace rรฉservรฉ avec la mรฉthode tf.placeholderDans la section Session, vous apprendrez ร  alimenter un espace rรฉservรฉ avec une valeur de tenseur rรฉelle.

La syntaxe est:

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)

Sortie

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

Session

TensorFlow fonctionne autour de 3 composants principaux :

  • Graphique
  • tenseur
  • Session
Composants Description
Graphique Le graphe est fondamental dans TensorFlow. Toutes les opรฉrations mathรฉmatiques (ops) sont effectuรฉes au sein d'un graphe. On peut se reprรฉsenter un graphe comme un projet dans lequel chaque opรฉration est rรฉalisรฉe. Les nล“uds reprรฉsentent ces opรฉrations et peuvent absorber ou crรฉer de nouveaux tenseurs.
tenseur Un tenseur reprรฉsente les donnรฉes qui รฉvoluent entre les opรฉrations. Vous avez vu prรฉcรฉdemment comment initialiser un tenseur. La diffรฉrence entre une constante et une variable rรฉside dans le fait que les valeurs initiales d'une variable changent au fil du temps.
Session Une session exรฉcute les opรฉrations du graphe. Pour alimenter le graphe avec les valeurs d'un tenseur, il faut ouvrir une session. ร€ l'intรฉrieur d'une session, il faut exรฉcuter un opรฉrateur pour gรฉnรฉrer une sortie.

Les graphiques et les sessions sont indรฉpendants. Vous pouvez exรฉcuter une session et conserver les valeurs pour des calculs ultรฉrieurs.

Dans l'exemple ci-dessous, vous allez :

  • Crรฉer deux tenseurs
  • Crรฉer une opรฉration
  • Ouvrir une session
  • Imprimer le rรฉsultat

ร‰tape 1) Vous crรฉez deux tenseurs x et y

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

ร‰tape 2) Vous crรฉez l'opรฉrateur en multipliant x et y

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

ร‰tape 3) Vous ouvrez une session. Tous les calculs s'effectuent au sein de cette session, et une fois terminรฉ, vous devez la fermer.

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

Sortie

[8]

Code explication

  • tf.Session()Ouvrez une session. Toutes les opรฉrations s'effectuent au sein de cette session.
  • run(multiply): exรฉcuter l'opรฉration crรฉรฉe ร  l'รฉtape 2
  • print(result_1)Enfin, vous pouvez imprimer le rรฉsultat.
  • close(): Clรดturer la session

Le rรฉsultat montre 8, qui est la multiplication de x et y.

Une autre faรงon de crรฉer une session consiste ร  l'intรฉgrer dans un bloc. L'avantage est que la session se ferme automatiquement.

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

Sortie

[8]

Dans le cadre d'une session, vous pouvez utiliser eval() mรฉthode d'exรฉcution de l'opรฉration. Elle est รฉquivalente ร  run() et rend le code plus lisible.

Vous pouvez crรฉer une session et voir les valeurs ร  l'intรฉrieur des tenseurs que vous avez crรฉรฉs jusqu'ร  prรฉsent.

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

Sortie

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

Les variables sont vides par dรฉfaut, mรชme aprรจs la crรฉation du tenseur. Vous devez initialiser une variable avant de pouvoir l'utiliser. L'objet tf.global_variables_initializer() Cette fonction est appelรฉe pour initialiser simultanรฉment les valeurs de chaque variable, ce qui est utile avant d'entraรฎner un modรจle.

Vous pouvez vรฉrifier les valeurs des variables que vous avez crรฉรฉes prรฉcรฉdemment. Notez que vous devez utiliser la fonction `run` pour รฉvaluer le tenseur.

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

Sortie

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

Vous pouvez utiliser l'espace rรฉservรฉ que vous avez crรฉรฉ prรฉcรฉdemment et l'alimenter avec une valeur rรฉelle. Vous devez transmettre les donnรฉes ร  feed_dict argument.

Par exemple, vous prendrez la puissance 2 de l'espace rรฉservรฉ 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 Explication

  • import numpy as np: Importer le NumPy bibliothรจque pour crรฉer les donnรฉes
  • tf.pow(data_placeholder_a, 2): Crรฉer les opรฉrations
  • np.random.rand(1, 10): Crรฉer un tableau de donnรฉes alรฉatoires
  • feed_dict={data_placeholder_a: data}: Alimentez le champ rรฉservรฉ avec des donnรฉes

Sortie

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

Graphique

TensorFlow reprรฉsente chaque opรฉration par un schรฉma de flux de donnรฉes. Le graphe de flux de donnรฉes a รฉtรฉ conรงu pour mettre en รฉvidence les dรฉpendances de donnรฉes entre les diffรฉrentes opรฉrations. Une formule mathรฉmatique ou un algorithme est composรฉ d'une sรฉrie d'opรฉrations successives, et un graphe permet de visualiser facilement la coordination de ces calculs.

Le graphe prรฉsente des nล“uds et des arรชtes. Un nล“ud reprรฉsente une opรฉration, c'est-ร -dire l'unitรฉ de calcul. Une arรชte reprรฉsente un tenseur : elle peut produire un nouveau tenseur ou consommer les donnรฉes d'entrรฉe, selon les dรฉpendances entre les diffรฉrentes opรฉrations.

La structure du graphe relie les opรฉrations (c'est-ร -dire les nล“uds) entre elles et montre comment chacune est alimentรฉe. Notez que le graphe n'affiche pas le rรฉsultat des opรฉrations ; il sert uniquement ร  visualiser les liens entre elles.

Prenons un exemple. Imaginez que vous souhaitiez รฉvaluer la fonction suivante :

La formule f de x et z est รฉgale ร  x fois z plus x au carrรฉ plus z plus cinq

TensorFlow construit un graphe pour exรฉcuter la fonction. Ce graphe ressemble ร  ceci :

Graphe TensorFlow avec des nล“uds variables X et Z alimentant les opรฉrations Mul, Pow et trois additions.

Vous pouvez facilement voir le chemin que prendront les tenseurs pour atteindre la destination finale.

Par exemple, le add Le nล“ud ne peut pas s'exรฉcuter avant les deux Mul et Pow ont produit leurs rรฉsultats. Le graphique montre que TensorFlow va :

  1. calculer xยทz dans le Mul nล“ud et xยฒ dans le Pow nล“ud
  2. additionnez ces deux rรฉsultats dans le add nล“ud
  3. ajouter z ร  cette somme dans le add_1 nล“ud
  4. ajouter la constante 5 dans le add_2 nล“ud
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 Explication

  • x : initialise une variable appelรฉe x avec une valeur constante de 5
  • z : Initialiser une variable appelรฉe z avec une valeur constante de 6
  • c : Initialiser un tenseur constant appelรฉ c avec une valeur constante de 5
  • carrรฉ : initialise un tenseur constant appelรฉ carrรฉ avec une valeur constante de 2
  • f : Construire l'opรฉrateur

Dans cet exemple, les valeurs des variables sont fixรฉes. Le tenseur constant c est le paramรจtre constant de la fonction f et prend la valeur 5 ; sur le graphique, ce paramรจtre est visible dans le tenseur appelรฉ constante.

Un tenseur constant a รฉgalement รฉtรฉ crรฉรฉ pour la puissance de l'opรฉrateur tf.pow()Ce n'est pas indispensable, mais cela signifie que l'exposant apparaรฎt sur le graphique sous la forme d'un cercle appelรฉ carrรฉ.

ร€ partir du graphique, vous pouvez suivre ce qui arrive aux tenseurs et pourquoi la fonction renvoie 66 : 5 ร— 6 plus 5ยฒ plus 6 plus 5 รฉgale 66.

Le code ci-dessous รฉvalue la fonction ร  l'intรฉrieur d'une session.

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)

Sortie

[66]

Guide de rรฉfรฉrence rapide des bases de TensorFlow

Les quatre tableaux ci-dessous rรฉpertorient toutes les commandes utilisรฉes dans ce tutoriel afin que vous puissiez en rechercher une sans avoir ร  parcourir ร  nouveau les exemples.

Crรฉer un tenseur constant

constant objet
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)

Crรฉer un opรฉrateur

Crรฉer un opรฉrateur Sujet
a + b tf.add(a, b)
a * b tf.multiply(a, b)

Crรฉer un tenseur variable

Crรฉer une variable objet
valeur alรฉatoire tf.get_variable("var", [1, 2])
premiรจre valeur initialisรฉe tf.get_variable("var_init_2", dtype=tf.int32, initializer=[ [1, 2], [3, 4] ])

Ouvrir une session

Session objet
Crรฉer une sรฉance tf.Session()
Exรฉcuter une session tf.Session.run()
ร‰valuer un tenseur variable_name.eval()
Fermer une session sess.close()
Sรฉance par bloc with tf.Session() as sess:

FAQ

Le suffixe correspond ร  l'indice de sortie de l'opรฉration ayant produit le tenseur. Const:0 dรฉsigne la premiรจre sortie de l'opรฉration nommรฉe Const. Les opรฉrations ร  plusieurs sorties sont numรฉrotรฉes :0, :1, etc.

En mode d'exรฉcution immรฉdiate, appelez la mรฉthode numpy() du tenseur ou transmettez-le ร  np.array(). Dans le style graphe-session prรฉsentรฉ ici, la valeur renvoyรฉe par sess.run() est dรฉjร  un NumPy Tableau.

Un tenseur irrรฉgulier contient des lignes de longueurs variables, contrairement ร  un tenseur classique. Il est crรฉรฉ avec `tf.ragged.constant` et convient aux donnรฉes de longueur variable, comme les phrases, oรน le remplissage de chaque ligne ร  une largeur donnรฉe entraรฎnerait un gaspillage de mรฉmoire.

TensorFlow utilise la diffusion : il compare les formes en partant de la derniรจre dimension et รฉtire tout axe de longueur un pour les faire correspondre. Les formes qui ne peuvent pas รชtre alignรฉes de cette maniรจre lรจvent une exception InvalidArgumentError au lieu de tenter une estimation.

TensorFlow exรฉcute automatiquement les opรฉrations sur un GPU visible. Pour forcer l'utilisation d'un pรฉriphรฉrique, placez le code dans un bloc `with tf.device('/GPU:0')`. Utilisez d'abord `tf.config.list_physical_devices('GPU')` pour vรฉrifier que le pรฉriphรฉrique est bien dรฉtectรฉ.

Les deux stockent des donnรฉes typรฉes ร  n dimensions, mais un tenseur est immuable, peut rรฉsider sur un GPU ou un TPU et enregistre les opรฉrations qui lui sont appliquรฉes, ce qui permet de calculer les gradients. Un tableau NumPy ne possรจde aucune de ces trois propriรฉtรฉs.

Les vรฉrificateurs de types statiques et les bibliothรจques d'annotations de formes comparent les formes dรฉclarรฉes aux opรฉrations de votre code et signalent les incohรฉrences avant l'exรฉcution. Les assistants d'รฉditeur affichent ces mรชmes avertissements directement dans le code, ce qui รฉvite la plupart des tรขtonnements.ping.

Copilote GitHub Il est suggรฉrรฉ de rรฉรฉcrire rapidement le code de session et les espaces rรฉservรฉs pour une exรฉcution immรฉdiate. Vรฉrifiez chaque suggestion, car elle propose souvent des solutions de contournement pour tf.compat.v1 alors qu'une vรฉritable solution de remplacement pour TensorFlow 2 existe.

Rรฉsumez cet article avec :