2013-07-03 10 views
34

Come posso stampare il valore numerico di un teano TensorVariabile? Sono nuovo a theano, quindi per favore sii paziente :)theano - valore di stampa di TensorVariable

Ho una funzione in cui ottengo come parametro. Ora voglio eseguire il debug-stampare la forma di questo y nella console. Utilizzando

print y.shape 

risultati nella Console di output (mi aspettavo numeri, vale a dire (2,4,4)):

Shape.0 

O come posso stampare il risultato numerico di per esempio il seguente codice (questo conta il numero di valori in y sono più grandi di metà del massimo):

errorCount = T.sum(T.gt(T.abs_(y),T.max(y)/2.0)) 

errorCount dovrebbe essere un unico numero perché T.sum riassume tutti i valori.

Sum.0 
+0

dalla documentazione - [ "Come posso stampare un valore intermedio in una funzione/metodo?"] (Http://deeplearning.net/software/theano/tutorial/debug_faq.html#how-do-i-print-an-intermediate-value-in -a-function-method) –

risposta

37

Se y è una variabile Theano, y.shape sarà una variabile Theano: Ma usando

print errCount 

me (si parla di 134 previsto) dà. quindi è normale che

print y.shape 

ritorno:

Shape.0 

Se si vuole valutare l'y.shape espressione, si può fare:

y.shape.eval() 

se y.shape non input per calcolare stesso (dipende solo dalla variabile condivisa e dalla costante). In caso contrario, se y dipendono variabile x Theano si può passare il valore ingressi in questo modo:

y.shape.eval(x=numpy.random.rand(...)) 

questa è la stessa cosa per il sum. Il grafico di Theano è una variabile simbolica che non esegue il calcolo fino a quando non lo compili con theano.function o chiama eval() su di essi.

EDIT: Per il docs, la sintassi in versioni più recenti di Theano è

y.shape.eval({x: numpy.random.rand(...)}) 
13

Per i lettori futuri: la risposta precedente è abbastanza buona. Ma, ho trovato il meccanismo di 'tag.test_value' più vantaggioso per il debug (vedi theano-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 

Per me, questo è molto più utile; ad esempio, verifica dimensioni corrette ecc.

1

stampa Valore di una variabile tensore.

Effettuare le seguenti operazioni:

print tensor[dimension].eval() # questo stampa il contenuto/valore in quella posizione nel Tensor

esempio, per un 1 d tensore:

print tensor[0].eval() 
+0

risposta parziale, giusto? – manetsus

Problemi correlati