2016-11-22 2 views
0

У меня есть 2D-массив, и я бы хотел применить поле функции softmax. Это попробовать следующее:Как заставить Theano сделать softmax по столбцу?

value = numpy.array([[1.0,2.0], [3.0,9.0], [7.0,1.0]], dtype=theano.config.floatX) 
m = theano.shared(value, name='m', borrow=True) 
y = theano.tensor.nnet.softmax(m) 
print y.eval() 

Как результат я получаю следующий вывод:

[[ 0.26894142 0.73105858] 
[ 0.00247262 0.99752738] 
[ 0.99752738 0.00247262]] 

Это означает, что операция была применена ряд мудр. Есть ли способ заставить Theano сделать мягкую колонку softmax?

ответ

2

Это означает, что операция была применена ряд мудрая

Что то, что он предназначен, чтобы сделать: http://deeplearning.net/software/theano/library/tensor/nnet/nnet.html#theano.tensor.nnet.nnet.softmax

Транспонирование массива получит ваш ожидаемый результат. Не зная Theano это немного догадка:

y = theano.tensor.nnet.T.softmax(m) 

или:

y = theano.tensor.T.nnet.softmax(m) 

Ссылка: http://deeplearning.net/software/theano/library/tensor/basic.html#theano.tensor._tensor_py_operators.T

+0

Помогло ли это? Каков фактический синтаксис? – Balzola

0

Простое решение: транспонирование

>>> import theano as th 
>>> T = th.tensor 
>>> x = th.tensor.matrix() 
>>> y = T.nnet.softmax(x.T).T 
>>> fn = th.function([x],y) 
>>> fn([[1.,2.],[1.,3.]]) 
array([[ 0.5  , 0.26894143], 
     [ 0.5  , 0.7310586 ]], dtype=float32) 

Для тензоров ранга> = 3, транспонирование требует указания осей.

#this perform softmax on 3rd dimension 
x = tensor4() 
T.nnet.softmax(x.transpose(0,1,3,2)).transpose(0,1,3,2)