teano – stampa il valore di TensorVariable

Come faccio a stampare il valore numerico di una teano TensorVariable?
Sono nuovo di teano, quindi si prega di essere pazienti 🙂

Ho una funzione in cui ho y come parametro.
Ora voglio debug-stampa la forma di questo y per la console.
Utilizzando

print y.shape

risultati nella console di output (mi aspettavo numeri, cioè (2,4,4)):

Shape.0

O come posso stampare il risultato numerico, ad esempio, il codice riportato di seguito (questo conta il numero di valori in y più la metà del massimo):

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

errorCount dovrebbe essere un singolo numero, perché T.sum somma di tutti i valori.
Ma utilizzando

print errCount

dà (previsto qualcosa di simile 134):

Sum.0

 

4 Replies
  1. 39

    Se y è un teano variabile y.avrà la forma di un teano variabile. quindi è normale che

    print y.shape

    ritorno:

    Shape.0

    Se si vuole valutare l’espressione di y.forma, si può fare:

    y.shape.eval()

    se y.shape non di ingresso per calcolare sé(non dipendono solo dalla variabile condivisa e costante). Altrimenti, se y dipendono dal x Teano variabile si può passare l’input valore come questo:

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

    questa è la stessa cosa per il sum. Teano grafico, simbolico variabile che non fanno il calcolo fino a quando si compila con theano.function o chiamare eval() su di loro.

    EDIT: Per il docs, la sintassi nelle versioni più recenti di teano è

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

    Per i futuri lettori: la risposta precedente è abbastanza buona.
    Ma, ho trovato il ‘tag.valore_test’ il meccanismo più utile per scopi di debug (vedi teano-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, alla verifica della corretta dimensioni, etc.

  3. 1

    stampa il Valore di un Tensore Variabile.

    Effettuare le seguenti operazioni:

    print tensor[dimension].eval() # questo permetterà di stampare il contenuto/valore in quella posizione il Tensore di

    Esempio, per un 1 d tensore:

    print tensor[0].eval()
    • risposta parziale, giusto?
  4. 0

    Utilizzare theano.printing.Print per aggiungere operatore di stampa per il vostro computazionale grafico.

    Esempio:

    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])

    Di uscita:

    this is a very important value __str__ = [ 1. 2. 3.]

    Fonte: Teano 1.0 docs: “Come faccio a Stampare un Valore Intermedio in Funzione?”

Lascia un commento