在theano中掩盖了softmax

时间:2016-12-20 22:23:28

标签: numpy theano numpy-broadcasting softmax

我想知道在执行theano.tensor.nnet.softmax之前是否可以应用掩码?

这是我正在寻找的行为:

>>>a = np.array([[1,2,3,4]])
>>>m = np.array([[1,0,1,0]]) # ignore index 1 and 3
>>>theano.tensor.nnet.softmax(a,m)
array([[ 0.11920292,  0. ,  0.88079708,  0.  ]])

请注意am是矩阵,所以我希望softmax能够处理整个矩阵并执行逐行屏蔽的softmax。

此外,输出应与a的形状相同,因此解决方案无法进行高级索引,例如theano.tensor.softmax(a[0,[0,2]])

2 个答案:

答案 0 :(得分:0)

theano.tensor.switch是一种方法。

在计算图中,您可以执行以下操作:

a_mask = theano.tensor.switch(m, a, np.NINF)
sm = theano.tensor.softmax(a_mask)

希望它能帮助别人。

答案 1 :(得分:0)

def masked_softmax(a, m, axis):
    e_a = T.exp(a)
    masked_e = e_a * m
    sum_masked_e = T.sum(masked_e, axis, keepdims=True)
    return masked_e / sum_masked_e