2015-07-11 11 views
11

Mam zmienną tensorową theano utworzoną z odlewania wspólnej zmiennej. Jak wyodrębnić oryginalne lub rzucone wartości? (Muszę to więc nie trzeba nosić oryginalne współdzielonych/wartości NumPy wokół.)Jak uzyskać wartość z zmiennej tensor theano wspartej przez zmienną dzieloną?

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

Odpowiedz

13

get_value działa tylko dla współdzielonych zmiennych. TensorVariables są wyrażeniami ogólnymi i dlatego potencjalnie potrzebują dodatkowego wejścia, aby móc określić ich wartość (Wyobraź sobie, że ustawiłeś y = x + z, gdzie z jest inną zmienną tensorową. Musisz wtedy określić z zanim będziesz mógł obliczyć y). Możesz utworzyć funkcję dostarczającą te dane wejściowe lub udostępniając je w słowniku przy użyciu metody eval.

W twoim przypadku, y zależy tylko od x, więc można zrobić

import theano 
import theano.tensor as T 

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

i powinieneś zobaczyć wynik

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

(A w przypadku y = x + z, to musiałby zrobić y.eval({z : 3.}), na przykład)