2015-07-11 4 views
11

Ich habe eine Theano-Tensor-Variable, die durch das Gießen einer gemeinsamen Variablen erzeugt wird. Wie kann ich die ursprünglichen oder gegossenen Werte extrahieren? (Ich brauche, dass ich muss also nicht um die Original-shared/numpy Werte tragen.)Wie erhält man einen Wert von einer Theano-Tensor-Variablen, die von einer gemeinsamen Variablen unterstützt wird?

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

Antwort

13

get_value funktioniert nur für gemeinsam genutzte Variablen. TensorVariables sind allgemeine Ausdrücke und benötigen daher möglicherweise zusätzliche Eingaben, um ihren Wert bestimmen zu können (Stellen Sie sich y = x + z ein, wobei z eine andere Tensorvariable ist. Sie müssten z angeben, bevor Sie y berechnen können). Sie können entweder eine Funktion erstellen, um diese Eingabe bereitzustellen, oder sie mithilfe der eval-Methode in einem Wörterbuch bereitstellen.

In Ihrem Fall hängt y nur auf x, so können Sie

import theano 
import theano.tensor as T 

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

tun, und Sie sollten das Ergebnis

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

(Und im Fall y = x + z, würden Sie tun müssen, um sehen y.eval({z : 3.}), zum Beispiel)