La façon [A] la plus simple d'évaluer la valeur réelle d'un Tensor
objet est de la transmettre à la Session.run()
méthode, ou d'appeler Tensor.eval()
lorsque vous avez une session par défaut (c'est-à-dire dans un with tf.Session():
bloc, ou voir ci-dessous). En général [B] , vous ne pouvez pas imprimer la valeur d'un tenseur sans exécuter du code dans une session.
Si vous expérimentez le modèle de programmation et souhaitez évaluer facilement les tenseurs, le tf.InteractiveSession
vous permet d'ouvrir une session au début de votre programme, puis d'utiliser cette session pour tous les appels Tensor.eval()
(et Operation.run()
). Cela peut être plus facile dans un cadre interactif, comme le shell ou un bloc-notes IPython, quand il est fastidieux de faire circuler un Session
objet partout. Par exemple, ce qui suit fonctionne dans un cahier Jupyter:
with tf.Session() as sess: print(product.eval())
Cela peut sembler idiot pour une si petite expression, mais l'une des idées clés de Tensorflow 1.x est l' exécution différée : il est très bon marché de construire une expression grande et complexe, et lorsque vous voulez l'évaluer, le back-end (à auquel vous vous connectez a Session
) est capable de planifier son exécution plus efficacement (par exemple, exécuter des parties indépendantes en parallèle et utiliser des GPU).
[A]: Pour imprimer la valeur d'un tenseur sans le retourner à votre programme Python, vous pouvez utiliser l' tf.print()
opérateur, comme Andrzej le suggère dans une autre réponse . Selon la documentation officielle:
Pour s'assurer que l'opérateur s'exécute, les utilisateurs doivent passer l'op produite à tf.compat.v1.Session
la méthode run ou utiliser l'op comme dépendance de contrôle pour les opérations exécutées en spécifiant avec tf.compat.v1.control_dependencies([print_op]
), qui est imprimée sur la sortie standard.
Notez également que:
Dans les cahiers et les colabs Jupyter, tf.print
imprime sur les sorties des cellules du cahier. Il n'écrira pas dans les journaux de la console du noyau du bloc-notes.
[B]: Vous pourriez être en mesure d'utiliser la tf.get_static_value()
fonction pour obtenir la valeur constante du tenseur donné si sa valeur est efficacement calculable.
tf.Session()
ne fonctionne pas dans Tensorflow 2. Vous pouvez utiliser à latf.compat.v1.Session()
place.Bien que d'autres réponses soient correctes, vous ne pouvez pas imprimer la valeur avant d'avoir évalué le graphique, mais elles ne parlent pas d'un moyen simple d'imprimer réellement une valeur à l'intérieur du graphique, une fois que vous l'avez évaluée.
La façon la plus simple de voir une valeur d'un tenseur chaque fois que le graphique est évalué (à l'aide de
run
oueval
) est d'utiliser l'Print
opération comme dans cet exemple:Maintenant, chaque fois que nous évaluons le graphique entier, par exemple en utilisant
b.eval()
, nous obtenons:la source
a.eval()
alors!tf.Print()
a été déprécié et (maintenant) supprimé. Utilisez plutôttf.print()
. Voir docs: tensorflow.org/api_docs/python/tf/Print et tensorflow.org/api_docs/python/tf/print .Réitérant ce que les autres ont dit, il n'est pas possible de vérifier les valeurs sans exécuter le graphique.
Un extrait simple pour quiconque cherche un exemple simple pour imprimer des valeurs est comme ci-dessous. Le code peut être exécuté sans aucune modification dans le bloc-notes ipython
Production:
la source
WARNING:tensorflow:From <ipython-input-25-8583e1c5b3d6>:1: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02. Instructions for updating: Use 'tf.global_variables_initializer' instead.
Non, vous ne pouvez pas voir le contenu du tenseur sans lancer le graphe (faire
session.run()
). Les seules choses que vous pouvez voir sont:transpose_1:0
,random_uniform:0
)float32
)Je n'ai pas trouvé cela dans la documentation, mais je pense que les valeurs des variables (et certaines des constantes ne sont pas calculées au moment de l'affectation).
Jetez un œil à cet exemple:
Le premier exemple où je viens d'initier un tenseur constant de nombres aléatoires s'exécute approximativement en même temps indépendamment de dim (
0:00:00.003261
)Dans le deuxième cas, où la constante est effectivement évaluée et les valeurs sont attribuées, le temps dépend clairement de dim (
0:00:01.244642
)Et vous pouvez le rendre plus clair en calculant quelque chose (
d = tf.matrix_determinant(m1)
en gardant à l'esprit que le temps va s'écoulerO(dim^2.8)
)PS j'ai trouvé où il est expliqué dans la documentation :
la source
Je pense que vous devez bien comprendre certains principes fondamentaux. Avec les exemples ci-dessus, vous avez créé des tenseurs (tableau multidimensionnel). Mais pour que le flux du tenseur fonctionne vraiment, vous devez lancer une " session " et exécuter votre " opération " dans la session. Notez le mot «session» et «opération». Vous devez connaître 4 choses pour travailler avec tensorflow:
Maintenant, d'après ce que vous avez écrit, vous avez donné le tenseur et l'opération, mais vous n'avez pas de session en cours ni de graphique. Les tenseurs (bords du graphe) traversent les graphes et sont manipulés par les opérations (nœuds du graphe). Il y a un graphique par défaut mais vous pouvez lancer le vôtre dans une session.
Lorsque vous dites imprimer, vous accédez uniquement à la forme de la variable ou de la constante que vous avez définie.
Ainsi, vous pouvez voir ce qui vous manque:
J'espère que ça aide!
la source
Dans
Tensorflow 1.x
Avec Tensorflow 2.x, le mode impatient est activé par défaut. le code suivant fonctionne donc avec TF2.0.
la source
Sur la base des réponses ci-dessus, avec votre extrait de code particulier, vous pouvez imprimer le produit comme ceci:
la source
Dans Tensorflow 2.0+ (ou dans un environnement en mode Eager), vous pouvez appeler la
.numpy()
méthode:la source
tf.print(product)
me donne également la même sortieprint(product.numpy())
qu'avec TF 2.0.tf.keras.backend.eval
est utile pour évaluer les petites expressions.Compatible TF 1.x et TF 2.0.
Exemple vérifiable minimal
Ceci est utile car vous n'avez pas besoin de créer explicitement un
Session
ouInteractiveSession
.la source
Vous pouvez vérifier la sortie d'un TensorObject sans exécuter le graphique dans une session, en activant une exécution rapide .
Ajoutez simplement les deux lignes de code suivantes:
import tensorflow.contrib.eager as tfe tfe.enable_eager_execution()
juste après toi
import tensorflow
.La sortie de
print product
dans votre exemple sera maintenant:tf.Tensor([[ 12.]], shape=(1, 1), dtype=float32)
Notez qu'à partir de maintenant (novembre 2017), vous devrez installer une version nocturne de Tensorflow pour permettre une exécution rapide. Des roues pré-construites peuvent être trouvées ici .
la source
Veuillez noter que
tf.Print()
cela changera le nom du tenseur. Si le tenseur que vous cherchez à imprimer est un espace réservé, l'alimentation des données échouera car le nom d'origine ne sera pas trouvé pendant l'alimentation. Par exemple:La sortie est:
la source
Vous devez considérer les programmes TensorFlow Core comme consistant en deux sections distinctes:
Donc, pour le code ci-dessous, il vous suffit de créer le graphique de calcul.
Vous devez également Pour initialiser toutes les variables dans un programme TensorFlow, vous devez explicitement appeler une opération spéciale comme suit:
Maintenant que vous créez le graphique et initialisez toutes les variables, l'étape suivante consiste à évaluer les nœuds, vous devez exécuter le graphique de calcul dans une session. Une session encapsule le contrôle et l'état du runtime TensorFlow.
Le code suivant crée un objet Session, puis appelle sa méthode d'exécution pour exécuter suffisamment de graphe de calcul pour évaluer
product
:la source
Vous pouvez utiliser Keras, la réponse sur une ligne consistera à utiliser une
eval
méthode comme celle-ci:la source
Essayez ce code simple! (c'est auto-explicatif)
la source
Je n'ai pas trouvé facile de comprendre ce qui est requis même après avoir lu toutes les réponses jusqu'à ce que j'exécute cela. TensofFlow est nouveau pour moi aussi.
Mais vous pouvez toujours avoir besoin de la valeur renvoyée en exécutant la session.
la source
Fondamentalement, dans tensorflow lorsque vous créez un tenseur de n'importe quel type, ils sont créés et stockés à l'intérieur, accessibles uniquement lorsque vous exécutez une session tensorflow. Supposons que vous ayez créé un tenseur constant
c = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
Sans exécuter de session, vous pouvez obtenir
-
op
: Une opération. Opération qui calcule ce tenseur.-
value_index
: Un int. Index du point final de l'opération qui produit ce tenseur.-
dtype
: Un DType. Type d'éléments stockés dans ce tenseur.Pour obtenir les valeurs, vous pouvez exécuter une session avec le tenseur dont vous avez besoin en tant que:
La sortie sera quelque chose comme ceci:
la source
Activez l'exécution désirée qui est introduite dans tensorflow après la version 1.10. C'est très simple à utiliser.
la source
À l'aide des conseils fournis dans https://www.tensorflow.org/api_docs/python/tf/print J'utilise la
log_d
fonction pour imprimer des chaînes formatées.la source
la source
tf.Print est désormais obsolète, voici comment utiliser tf.print (p minuscule) à la place.
Bien que l'exécution d'une session soit une bonne option, ce n'est pas toujours la voie à suivre. Par exemple, vous pouvez imprimer un tenseur dans une session particulière.
La nouvelle méthode d'impression renvoie une opération d'impression qui n'a pas de tenseurs de sortie:
Comme il n'a pas de sortie, vous ne pouvez pas l'insérer dans un graphique de la même manière que vous le feriez avec tf.Print. Au lieu de cela, vous pouvez l'ajouter pour contrôler les dépendances dans votre session afin de la faire imprimer.
Parfois, dans un graphique plus grand, peut-être créé en partie dans des sous-fonctions, il est difficile de propager le print_op à l'appel de session. Ensuite, tf.tuple peut être utilisé pour coupler l'opération d'impression avec une autre opération, qui s'exécutera ensuite avec cette opération, quelle que soit la session qui exécute le code. Voici comment procéder:
la source
Question: Comment imprimer la valeur d'un objet Tensor dans TensorFlow?
Répondre:
la source