首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用softmax函数进行多任务分类

使用softmax函数进行多任务分类
EN

Stack Overflow用户
提问于 2019-05-28 08:05:01
回答 1查看 499关注 0票数 2

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

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

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

下面是他们用lassagna实现的代码:

代码语言:javascript
复制
    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上实现这一点?我测试了上面的函数,当我向它传递张量时,它可以工作,但由于输入的形状错误,训练失败。例如,我的目标变量具有形状(10000,154),但当我使用批量大小128拟合模型时,它会引发错误,并显示预期的形状为(128,78)。

原文:https://link.springer.com/article/10.1186/s13321-017-0232-0

EN

回答 1

Stack Overflow用户

发布于 2020-08-27 02:44:35

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56333612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档