【问题标题】:Which deep learning model can classify categories which are not mutually exclusive哪种深度学习模型可以对不互斥的类别进行分类
【发布时间】:2017-09-05 02:09:45
【问题描述】:

示例:我在职位描述中有一句话:“英国Java高级工程师”。

我想使用深度学习模型将其预测为 2 个类别:EnglishIT jobs。如果我使用传统的分类模型,它只能在最后一层使用softmax 函数预测 1 个标签。因此,我可以使用 2 个模型神经网络来预测两个类别的“是”/“否”,但如果我们有更多类别,那就太昂贵了。那么我们是否有任何深度学习或机器学习模型可以同时预测 2 个或更多类别?

“编辑”:传统方法使用 3 个标签,它将由 [1,0,0] 编码,但在我的情况下,它将由 [1,1,0] 或 [1,1,1] 编码]

示例:如果我们有 3 个标签,一个句子可能适合所有这些标签。因此,如果 softmax 函数的输出为 [0.45 , 0.35 , 0.2 ] 我们应该将其分为 3 个标签或 2 个标签,或者可能是一个?

我们这样做的主要问题是:分类为 1、2 或 3 个标签的良好阈值是多少?

【问题讨论】:

  • 使用两个模型?
  • 如我所说,如果我们有 10 - 20 个类别,那就太贵了

标签: machine-learning tensorflow nlp deep-learning


【解决方案1】:

如果您有 n 个可以同时为真的不同类别,则在您的输出层中使用 sigmoid 激活函数有 n 个输出。这将为每个输出独立地赋予一个介于 0 和 1 之间的值。

您的损失函数应该是输出的负对数似然的平均值。在张量流中,这是:

linear_output = ...  # the output layer before applying activation function
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(
    logits=linear_output, labels=correct_outputs))
output = tf.sigmoid(linear_output)  # 0 to 1 for each category

【讨论】:

  • 对不起,你能解释更多吗?我还是无法理解你的想法。通常,输出节点数=类别数,那么如何更改呢?
  • @voxter 您有 2 个类别和 2 个输出节点,所以这仍然是正确的。您只需应用 sigmoid 激活而不是 softmax。
  • ex:我们有 3 个标签:如果我们使用 soft max 函数:输出将是 [0.45 , 0.35 , 0.2 ](总和总是等于 1 )。如果我们使用 signmoid :output 将是 [ 0.8 , 0.8 , 0.6 ] > 我们可以选择它是分为 2 个标签还是 3 个标签?
  • 如果你有 2 个类别,你应该有 2 个输出。如果您有 3 个类别,则应该有 3 个输出。 sigmoid 会给每个人一个介于 0 和 1 之间的值,这是该类别的概率。与 softmax 不同,这些值的总和不等于 1,因此它们中的任意数量都可以同时为真(接近 1)。
猜你喜欢
  • 2021-11-23
  • 2017-05-20
  • 2015-07-08
  • 2017-06-13
  • 1970-01-01
  • 2021-12-21
  • 2018-10-15
  • 2019-12-21
  • 1970-01-01
相关资源
最近更新 更多