2017-01-11 7 views
2

Давайте предположим, что у меня есть 4-мерный тензор A, и я хотел бы умножить его с 3-мерным тензором B следующим образом:Как выполнить «обобщенную» матричную операцию в Theano?

C[i,k,a,b] = sum_{j,l} A[i,j,k,l]*B[a,j,b,l] 

Это обобщение матричного умножения:

z[i,k] = sum_j x[i,j]*y[j,k] 

Другими словами, я сопоставляю некоторые индексы первого тензора с некоторыми индексами второго тензора и затем суммируем по ним.

ответ

2

Если я прав, это делается с помощью функции dot модуля theano.tensor.

Вся соответствующая информация находится в the doc on linear algebra for tensor with theano

Вы можете пойти еще дальше и указать ось суммирования с использованием theano.tensor.tensordot, так, чтобы воспроизвести ваш пример, это может быть:

import theano.tensor as T 

A = T.ftensor4() # create a 4 dimensional float32 tensor 
B = T.ftensor4() 

C = T.tensordot(A,B, axes=[[1,3],[1,3]]) # here you can specify on which indices to sum 

print C.ndim 
# >> 4