2014-05-14 10 views
8

I einfache Codes haben wie unten dargestellt:Wie man theano.tensor zu numpy.array schaltet?

class testxx(object): 
    def __init__(self, input): 
     self.input = input 
     self.output = T.sum(input) 
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype = np.float32) 
classfier = testxx(a) 
outxx = classfier.output 
outxx = np.asarray(outxx, dtype = np.float32) 

Allerdings habe ich die folgenden Fehlerinformationen erhalten:

ValueError: setting an array element with a sequence. 

Außerdem, wenn ich die Funktion von theano.tensor verwenden, scheint es, dass das, was es Returns heißt "Tensor", und ich kann nicht einfach auf den Typ numpy.array umschalten, obwohl das Ergebnis wie eine Matrix aussehen sollte.

Das ist meine Frage: Wie kann ich outxx umschreiben numpy.array?

+1

können Sie den vollständigen Traceback-Fehler buchen? –

Antwort

3

Theano "tensor" Variable sind symbolische Variable. Was Sie mit ihnen bauen, ist wie ein Programm, das Sie schreiben. Sie müssen eine Theano-Funktion kompilieren, um das Programm auszuführen. Es gibt zwei Möglichkeiten, um eine Theano Funktion zu kompilieren:

f = theano.function([testxx.input], [outxx]) 
f_a1 = f(a) 

# Or the combined computation/execution 
f_a2 = outxx.eval({testxx.input: a}) 

Wenn Sie eine Theano Funktion zu kompilieren, Sie sagen muss, was die Eingabe ist und was der Ausgang ist. Deshalb gibt es 2 Parameter im Aufruf von theano.function(). eval() ist eine Schnittstelle, die eine Theano-Funktion für bestimmte symbolische Eingaben mit entsprechenden Werten kompiliert und ausführt.

1

Seit testxx verwendet sum() von theano.tensor und nicht von numpy, erwartet er wahrscheinlich ein TensorVariable als Eingabe und keine numpy Array.

=> Ersetzen Sie a = np.array(...) durch a = T.matrix(dtype=theano.config.floatX).

Vor Ihrer letzten Zeile ist outxx dann eine TensorVariable, die von a abhängt. Sie können es also auswerten, indem Sie den Wert a angeben.

=> Ersetzen Sie Ihre letzte Zeile outxx = np.asarray(...) durch die folgenden zwei Zeilen.

f = theano.function([a], outxx) 
outxx = f(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype = np.float32)) 

Der folgende Code wird ohne Fehler ausgeführt.

import theano 
import theano.tensor as T 
import numpy as np 

class testxx(object): 
    def __init__(self, input): 
     self.input = input 
     self.output = T.sum(input) 
a = T.matrix(dtype=theano.config.floatX) 
classfier = testxx(a) 
outxx = classfier.output 
f = theano.function([a], outxx) 
outxx = f(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype = np.float32)) 

Theano Dokumentation auf adding scalars gibt ähnliche Beispiele.