如何强制Theano做softmax柱?

时间:2016-11-22 09:55:01

标签: python numpy matrix theano softmax

我有一个2D数组,我想明智地应用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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)