2015-07-11 7 views
11

Ho una variabile tensoriale theano creata dalla fusione di una variabile condivisa. Come posso estrarre i valori originali o castati? (Ho bisogno che quindi non c'è bisogno di portare i valori originali condivisi/NumPy intorno.)Come ottenere il valore da una variabile tensoriale theano supportata da una variabile condivisa?

>>> x = theano.shared(numpy.asarray([1, 2, 3], dtype='float')) 
>>> y = theano.tensor.cast(x, 'int32') 
>>> y.get_value(borrow=True) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'TensorVariable' object has no attribute 'get_value' 
# whereas I can do this against the original shared variable 
>>> x.get_value(borrow=True) 
array([ 1., 2., 3.]) 

risposta

13

get_value funziona solo per le variabili condivise. TensorVariables sono espressioni generali e quindi potenzialmente hanno bisogno di input aggiuntivi per poter determinare il loro valore (Immaginate di impostare y = x + z, dove z è un'altra variabile tensoriale. Dovresti specificare z prima di poter calcolare). È possibile creare una funzione per fornire questo input o fornirlo in un dizionario usando il metodo eval.

Nel tuo caso, y dipende solo x, in modo da poter fare

import theano 
import theano.tensor as T 

x = theano.shared(numpy.asarray([1, 2, 3], dtype='float32')) 
y = T.cast(x, 'int32') 
y.eval() 

e si dovrebbe vedere il risultato

array([1, 2, 3], dtype=int32) 

(E nel caso y = x + z, si avrebbe a che fare y.eval({z : 3.}), ad esempio)