web-dev-qa-db-fra.com

Que sont les tenseurs symboliques dans TensorFlow et Keras?

Que sont les tenseurs symboliques dans TensorFlow et Keras? En quoi sont-ils différents des autres tenseurs? Pourquoi existent-ils même? Où viennent-ils dans TensorFlow et Keras? Comment devons-nous y faire face ou quels problèmes pouvons-nous affronter lorsque nous les traitons?

Dans le passé, j'avais rencontré certains problèmes liés aux tenseurs symboliques, tels que le _SymbolicException, mais la documentation ne décrit pas ce concept. Il y a aussi n autre article où cette question est également posée, mais, dans cet article, je me concentre sur cette question spécifique, afin que les réponses puissent être utilisées plus tard comme référence.

3
nbro

D'après blog.tensorflow.org , un tenseur symbolique diffère des autres tenseurs en ce qu'ils ne contiennent pas spécifiquement de valeurs.

Prenons un exemple simple.

>>> a = tf.Variable(5, name="a")
>>> b = tf.Variable(7, name="b")
>>> c = (b**2 - a**3)**5
>>> print(c)

La sortie est la suivante:

tf.Tensor(1759441920, shape=(), dtype=int32)

Pour ce qui précède, les valeurs sont spécifiquement définies au format tf.Variable et la sortie est au format Tensor. Cependant, le tenseur doit contenir une valeur pour être considéré comme tel.

Les tenseurs symboliques sont différents en ce qu'aucune valeur explicite n'est requise pour définir le tenseur, ce qui a des implications en termes de construction de réseaux de neurones avec TensorFlow 2.0, qui utilise désormais Keras comme API par défaut.

Voici un exemple de réseau neuronal séquentiel utilisé pour construire un modèle de classification pour prédire les incidences d'annulation d'hôtels (Jupyter Notebook complet ici si intéressé):

from tensorflow.keras import models
from tensorflow.keras import layers

model = models.Sequential()
model.add(layers.Dense(8, activation='relu', input_shape=(4,)))
model.add(layers.Dense(1, activation='sigmoid'))

Il s'agit d'un modèle défini symboliquement, car aucune valeur n'est explicitement définie dans le réseau. Un cadre est plutôt créé pour que les variables d'entrée soient lues par le réseau, puis génèrent des prédictions.

À cet égard, Keras est devenu très populaire car il permet de construire des graphiques à l'aide de tenseurs symboliques, tout en conservant une disposition impérative.

3
Michael Grogan