web-dev-qa-db-fra.com

theano - valeur d'impression de TensorVariable

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
35
Stefan Profanter

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(...)})
37
nouiz

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.

13
zuuz

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()
1
Chandan Maruthi

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?”

0
Nicolas Ivanov