2016-12-27 4 views
0

Ich habe ein Theano dvector mit 100 Elementen. Ich habe auch eine Matrix mit 5 Spalten und 100 Zeilen (jede Spalte enthält also 100 Elemente).Wie multipliziert man in Theano die einzelnen Spalten einer Matrix elementweise mit einem Vektor?

Jetzt muss ich eine elementweise Multiplikation jeder Spalte mit dem Vektor anwenden. Was ist ein korrekter Weg in Theano?

Soll ich eine neue Matrix erstellen, indem ich meinen Vektor 5 Mal wiederhole und ihn transponiere und dann zwei Matrizen derselben Form elementweise multipliziere?

ADDED

habe ich gelernt, dass in numpy, um das gewünschte Verhalten zu erreichen, muss ich nur mit einer Spalte mein Vektor als 2D-Array deklarieren. Mit anderen Worten, ich muss einen "row" -Vektor durch eine "column" -Vektoren ersetzen (oder ich muss die Werte vertikal anstelle von horizontal schreiben). In diesem Fall sendet numpy den Vektor (Spalte) wie gewünscht (jede Spalte meiner Matrix wird mit meinem Vektorelement multipliziert). Allerdings sieht es aus wie Theano dieses Verhalten nicht von numpy erben:

X = T.dmatrix('X') 

w = np.array([ 
    [10.0, 0.0, 0.0, 0.0, 0.0], 
    [0.0, 10.0, 0.0, 0.0, 0.0], 
    [0.0, 0.0, 10.0, 0.0, 0.0] 
    ], dtype=th.config.floatX) 
w = np.transpose(w) 

W = th.shared(w, name='W', borrow=True) 

R = W + X 

f = th.function([X], R) 

x = np.array([[1.0], [2.0], [3.0], [4.0], [5.0]]) 
print f(x) 

Dies ist der Fehler, die ich bekomme:

ValueError: Input dimension mis-match. (input[0].shape[1] = 3, input[1].shape[1] = 1) 
Apply node that caused the error: Elemwise{add,no_inplace}(W, X) 
Toposort index: 0 
Inputs types: [TensorType(float64, matrix), TensorType(float64, matrix)] 
Inputs shapes: [(5, 3), (5, 1)] 
Inputs strides: [(8, 40), (8, 8)] 

By the way, funktioniert der Code, wenn ich x in der folgenden definieren übrigens:

x = np.array([[1.0, 1.0, 1.0], [2.0, 2.0, 2.0], [3.0, 3.0, 3.0], [4.0, 4.0, 4.0], [5.0, 5.0, 5.0]]) 

Antwort

0

Die „native“ Lösung, die ich gefunden habe, ist theano.tensor.extra_ops.repeat Betrieb zu verwenden. Genauer gesagt, ich brauche

Dieser Vorgang wird den Spaltenvektor 3 mal wiederholen. Als Ergebnis erhalten wir eine Matrix mit 3 (identischen) Spalten, und diese Matrix kann mit der W Matrix elementweise multipliziert (oder summiert) werden.

Verwandte Themen