TensorFlow a deux façons d'évaluer une partie du graphique: Session.run
sur une liste de variables et Tensor.eval
. Y a-t-il une différence entre ces deux?
python
tensorflow
Geoffrey Irving
la source
la source
tf.Tensor.eval()
ettf.Session.run()
, mais connectés sonttf.Operation.run()
ettf.Tensor.eval()
comme expliqué iciRéponses:
Si vous avez un
Tensor
t, appelert.eval()
équivaut à appelertf.get_default_session().run(t)
.Vous pouvez définir une session par défaut comme suit:
La différence la plus importante est que vous pouvez utiliser
sess.run()
pour récupérer les valeurs de nombreux tenseurs dans la même étape:Notez que chaque appel à
eval
etrun
exécutera le graphique entier à partir de zéro. Pour mettre en cache le résultat d'un calcul, affectez-le à atf.Variable
.la source
a = tf.constant(2.0) b = tf.constant(3.0) ab = tf.matmul(a, b)
et je viens de me plaindre de tensorflow que les formes ne correspondent pas, je suppose plus précisément, que le rang doit être au moins 2.tf.multiply(t, u)
et cela a bien fonctionné.La session FAQ sur l'écoulement tensoriel a une réponse à exactement la même question . Je vais juste aller de l'avant et le laisser ici:
Si
t
est unTensor
objet,t.eval()
est un raccourci poursess.run(t)
(oùsess
est la session par défaut en cours. Les deux extraits de code suivants sont équivalents:Dans le deuxième exemple, la session agit comme un gestionnaire de contexte, ce qui a pour effet de l'installer comme session par défaut pour la durée de vie du
with
bloc. L'approche du gestionnaire de contexte peut conduire à un code plus concis pour des cas d'utilisation simples (comme les tests unitaires); si votre code traite de plusieurs graphiques et sessions, il peut être plus simple d'appeler explicitement versSession.run()
.Je vous recommande de parcourir au moins toute la FAQ, car cela pourrait clarifier beaucoup de choses.
la source
eval()
ne peut pas gérer l'objet listemais
Session.run()
peutCorrigez-moi si je me trompe
la source
La chose la plus importante à retenir:
Savoir tout cela est simple :
Je décrirais également la méthode
tf.Operation.run()
comme ici :la source
Dans tensorflow, vous créez des graphiques et passez des valeurs à ce graphique. Le graphique fait tout le travail et génère la sortie en fonction de la configuration que vous avez effectuée dans le graphique. Maintenant Lorsque vous transmettez des valeurs au graphique, vous devez d'abord créer une session tensorflow.
Une fois la session initialisée, vous êtes censé utiliser cette session car toutes les variables et tous les paramètres font désormais partie de la session. Il existe donc deux façons de transmettre des valeurs externes au graphique afin que le graphique les accepte. L'une consiste à appeler le .run () pendant que vous utilisez la session en cours d'exécution.
Une autre manière qui est fondamentalement un raccourci pour cela est d'utiliser .eval (). J'ai dit raccourci car la forme complète de .eval () est
Vous pouvez le vérifier vous-même. Sur le lieu de la
values.eval()
coursetf.get_default_session().run(values)
. Vous devez avoir le même comportement.ce que fait eval, c'est d'utiliser la session par défaut, puis d'exécuter run ().
la source
Réponse compatible Tensorflow 2.x : Conversion du code de mrry
Tensorflow 2.x (>= 2.0)
pour le bénéfice de la communauté.la source