2014-10-20 4 views
1

У меня есть вопрос о библиотеке anano. Предположим, у меня есть две матрицы: a_ij и b_ij, которые имеют соответственно формы [n, m1] и [n, m2].Определение выражения в anano

Я хочу, чтобы определить выражение, которое дает тензор c формы [n, m1, m2]:

c_ijk = a_ij * b_ik 

(обратите внимание, что нет никакой суммы, так что это не скалярное произведение). Конечно, я могу сделать это вычисление в цикле, но я хочу, чтобы theano вычислил производные для меня.

Заранее благодарен!

ответ

1

Термометры Anano передаются точно так же, как массивы numpy. Все, что вам нужно сделать, это

import theano 
import theano.tensor as T 

import numpy as np 
rng = np.random.RandomState(42) 

n, m1, m2 = 10, 20, 30 
A = T.fmatrix() 
B = T.fmatrix() 

C = A.reshape((n, m1, 1)) * B.reshape((n, 1, m2)) 

func_C = theano.function([A, B], C) 

a = rng.randn(n, m1).astype(np.float32) 
b = rng.randn(n, m2).astype(np.float32) 

r1 = func_C(a, b) 
r2 = np.einsum("ij, ik -> ijk", a, b) 
assert np.sqrt(((r1 - r2) ** 2).sum()) < 1e-5 

Если определение C является важной частью. Это также можно сделать с помощью динамических форм, но этот ответ остается в вашей структуре.

+0

Это было очень легко, стыдно за меня. Спасибо :) – Alleo

Смежные вопросы