Tensorflow 基于softmax函数的多任务分类

Tensorflow 基于softmax函数的多任务分类,tensorflow,keras,deep-learning,softmax,Tensorflow,Keras,Deep Learning,Softmax,我正在尝试使用softmax作为输出函数来训练一个多任务分类神经网络 这一想法来源于“超越炒作:深度神经网络优于使用ChEMBL生物活性基准集的已建立方法”这篇论文,作者描述了一个具有3个隐藏层([400020001000])和一个输出层的MT-NN,其中节点数与任务数相同(即1227个)。该数据集由针对不同蛋白质目标测试的分子组成,标签“1”和“0”将其描述为活性/非活性。此外,一个分子可以被归类为在多个目标中具有活性 在本文中,作者在输出层上使用了一个自定义的softmax函数,该函数不是产

我正在尝试使用softmax作为输出函数来训练一个多任务分类神经网络

这一想法来源于“超越炒作:深度神经网络优于使用ChEMBL生物活性基准集的已建立方法”这篇论文,作者描述了一个具有3个隐藏层([400020001000])和一个输出层的MT-NN,其中节点数与任务数相同(即1227个)。该数据集由针对不同蛋白质目标测试的分子组成,标签“1”和“0”将其描述为活性/非活性。此外,一个分子可以被归类为在多个目标中具有活性

在本文中,作者在输出层上使用了一个自定义的softmax函数,该函数不是产生一个向量o概率和为1,而是为每个节点/任务提供独立的概率。这对我来说很奇怪,因为我知道softmax函数的概率之和是一

以下是他们在lassagna中实现时使用的代码:

    def custom_softmax(x):
        num_groups = num_outputs # number of tasks
        probabilities = softmax(x[:, 0:2])
        for i in range(2, 2 * num_groups, 2):
            p_y_given_x = softmax(x[:, 2 * i:2 * i + 2])
            probabilities = T.concatenate([probabilities, p_y_given_x], axis=1)
        return probabilities
由于他们没有回复我的电子邮件,我想问是否有人能解释一下这个定制的softmax在做什么。我天真地认为应该使用sigmoid函数。在我看来,输出层上的每个节点都是独立处理的

另一件事是我如何在Keras上实现这一点?我测试了上面的函数,当我传递一个张量给它时,它就工作了,但由于输入的形状错误,训练失败了。例如,我的目标变量有shape(10000154),但当我用批量大小128拟合模型时,它会出现错误,并表示它预期的形状为(128,78)


原始论文:

Sigmoid函数为每个激活节点提供0-1的激活概率,其中softmax将为所有输出的总和提供0-1的激活概率。因此,您混合了这两个概念,您的形状不匹配可能是由于softmax shape=2,(152/2!=78您在最后一个小批量大小方面也有一些索引问题)

我想,您正在谈论的是。那么我支持你的想法,应该使用sigmoid函数。你有什么特殊的理由去理解那篇论文吗?如果不是的话,我建议你继续使用sigmoid.hi@lanenok。这很奇怪,因为我在其他地方也看到过这种实现!一个包含多个节点的隐藏层+softmax_交叉熵。此外,当我尝试使用sigmoid时,我的回忆率很低,但精确度很高(可能是因为类不平衡)。我同意使用sigmoid:参见Andrew Ng的多任务学习:为了澄清我的信息,我要补充的是,对于每个输出,sigmoid函数的概率之和为1(1=p+(1-p)),对于所有输出,softmax函数的概率之和为1(1=p1+p2…+pn/其中n是所有输出的数量)进一步澄清答案:对每个输出层使用sigmoid函数,对应于您想要识别的项目/任务的数量!不要使用softmax函数!