Comment puis-je imprimer la valeur numérique d'un theano TensorVariable? Je suis nouveau sur theano, alors s'il vous plaît soyez patient :)
J'ai une fonction où je reçois y
en tant que paramètre . Maintenant, je veux déboguer-imprimer la forme de cette y
sur la console .
print y.shape
résultats dans la sortie de la console (je m'attendais à des chiffres, c.-à-d. (2,4,4)
):
Shape.0
Ou comment puis-je imprimer le résultat numérique, par exemple, du code suivant (cela compte combien de valeurs dans y
sont supérieures à la moitié du maximum):
errorCount = T.sum(T.gt(T.abs_(y),T.max(y)/2.0))
errorCount
devrait être un nombre unique car T.sum
résume toutes les valeurs . Mais en utilisant
print errCount
me donne (attendu quelque chose comme 134
):
Sum.0
Si y est une variable theano, y.shape sera une variable theano. il est donc normal que
print y.shape
revenir:
Shape.0
Si vous voulez évaluer l'expression y.shape, vous pouvez faire:
y.shape.eval()
si y.shape
n'entre pas pour se calculer (cela dépend uniquement de la variable partagée et de la constante). Sinon, si y
dépend de la variable x
Theano, vous pouvez transmettre la valeur des entrées de la manière suivante:
y.shape.eval(x=numpy.random.Rand(...))
c'est la même chose pour la variable sum
. Les graphiques sont des variables symboliques qui ne font pas de calcul tant que vous ne le compilez pas avec theano.function
ou n’appelez eval()
dessus.
EDIT: Selon les docs , la syntaxe dans les versions les plus récentes de theeano est
y.shape.eval({x: numpy.random.Rand(...)})
Pour les futurs lecteurs: la réponse précédente est assez bonne. Mais j’ai trouvé le mécanisme 'tag.test_value' plus avantageux pour le débogage (voir theeano-debug-faq ):
from theano import config
from theano import tensor as T
config.compute_test_value = 'raise'
import numpy as np
#define a variable, and use the 'tag.test_value' option:
x = T.matrix('x')
x.tag.test_value = np.random.randint(100,size=(5,5))
#define how y is dependent on x:
y = x*x
#define how some other value (here 'errorCount') depends on y:
errorCount = T.sum(y)
#print the tag.test_value result for debug purposes!
errorCount.tag.test_value
Pour moi, c'est beaucoup plus utile. par exemple, vérifier les dimensions correctes, etc.
print Valeur d'une variable tenseur.
Faites ce qui suit:
print tensor[dimension].eval()
# ceci imprimera le contenu/la valeur à cette position dans le Tenseur
Exemple, pour un tenseur 1 j:
print tensor[0].eval()
Utilisez theano.printing.Print
pour ajouter un opérateur d’impression à votre graphique de calcul.
Exemple:
import numpy
import theano
x = theano.tensor.dvector('x')
x_printed = theano.printing.Print('this is a very important value')(x)
f = theano.function([x], x * 5)
f_with_print = theano.function([x], x_printed * 5)
#this runs the graph without any printing
assert numpy.all( f([1, 2, 3]) == [5, 10, 15])
#this runs the graph with the message, and value printed
assert numpy.all( f_with_print([1, 2, 3]) == [5, 10, 15])
Sortie:
this is a very important value __str__ = [ 1. 2. 3.]
Source: Theano 1.0 docs: “Comment imprimer une valeur intermédiaire dans une fonction?”