我有一个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柱?
答案 0 :(得分:2)
这意味着该操作已逐行应用
转置数组将获得预期的结果。不知道Theano这是一个猜测:
y = theano.tensor.nnet.T.softmax(m)
或:
y = theano.tensor.T.nnet.softmax(m)
答案 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)