2016-07-06 2 views
2

сказать, что я эта функцию Theano, которая определяет слой нейронной сети:Theano: Форма переменного тензора внутри функции

def layer(W, x): 
    b = np.array(np.ones(N)) # append 1 for intercept 
    newx = T.concatenate([x, T.stack(b)], 0) 
    return T.dot(W, newx) 

Я конкатенация те (который является вектором б) до конца матрицы входных данных x перед передачей ее через матрицу W. Проблема в том, что мне нужно указать длину для b. Матрица данных имеет N столбцов, но, скажем, мы не знаем этого заранее.

Я не мог найти, как правильно сделать ананано-ананас size(x, 2) в Matlab. Я знаю, что x является символической переменной на данный момент, но я не мог найти, как найти форму тензорной переменной внутри функции.

ответ

2

Вы можете попробовать использовать theano.tensor.shape, чтобы получить форму объекта, о котором идет речь, или , более непосредственно, вы можете использовать theano.tensor.ones_like.

+1

theano.tensor.shape() не работает. (Он возвращает Shape.0). Я думаю, что мне нужно сделать, так или иначе получить значение, а затем вычислить форму. Если бы x была общей переменной, я мог бы это сделать, но это не так. –

+0

И не могли бы вы привести пример для anano.tensor.ones_like? Благодаря! –

+0

theano.tensor.shape возвращает переменную-тензор, поэтому он возвращает форму Shape.0. Если вы хотите использовать это, вы бы сделали что-то вроде 'b = T.ones (T.shape (x) [1])'. Или, используя one_like, вы можете сделать 'T.ones_like (x [0])'. – harshil

0

Theano знает о форме объекта, используя «типа» (см Tensor basics)

Так x.type.dtype, x.type.ndim, x.type.broadcastable, дать вам хороший набор информация о типе и форме тензорной переменной.

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