【问题标题】:multi label problem with intermediate labels中间标签的多标签问题
【发布时间】:2021-05-24 18:28:34
【问题描述】:

我正在尝试为以下问题创建模型

id   input (diagnoses)    elapsed_days    output (medication)
 1     [2,3,4]                 0             [3,4]
 1     [4,5,6]                 7             [1]
 1     [2,3]                  56             [6,3]
 2     [6,5,9,10]              0             [5,3,1]

随着时间的推移,不同代码的标签不是一个标签,而是每个时间段都有标签。 我认为我的拱门将是 [输入] -> [嵌入诊断] -> [将标准化经过的天数附加到嵌入] -> [LSTM] -> [FFNs] -> [标签随时间变化]

如果每个 id 有一个标签,我很熟悉如何设置它。鉴于每一行都有标签(即每个 id 有多个标签),我是否应该通过 FFN 传递 LSTM 的隐藏层然后分配标签?如果有人可以为此类问题指出参考/博客/github/anything 或在此处提出替代方法,我将不胜感激。

【问题讨论】:

    标签: deep-learning pytorch lstm


    【解决方案1】:

    假设[6,3] 等于[3, 6]

    您可以将 Sigmoid 激活与二进制交叉熵损失函数(nn.BCELoss 类)一起使用,而不是 Softmax 交叉熵(nn.CrossEntropyLoss 类)。

    但是输出基本事实而不是使用 nn.CrossEntropyLoss 时的整数。您需要使它们成为一种热编码。例如,如果所需的输出是 [6, 3] 并且输出有 10 个节点。 y_true 必须是 [0, 0, 0, 1, 0, 0, 1, 0, 0, 0]

    根据您实现数据生成器的方式,这是一种方法。

    output = [3, 6]
    out_tensor = torch.zeros(10)
    out_tensor[output] = 1
    

    但如果[6,3] 不等于[3, 6]。那么需要更多关于这方面的信息。

    【讨论】:

    • 是的,我意识到这一点。我的问题是,如果我只是传入每条记录,DL 模型将不知道第 1 行和第 2 行属于同一个人。我如何确保这一点?
    • 我明白了。我能想到的唯一方法是将它们堆叠在一起。如果输入的数字不重复,那么它也可以成为一个热门的输出。
    • 例如第一个人将有 (3, 10) 输入和输出形状
    • 实际上可能是 (10, 3) 用于 pytorch。
    猜你喜欢
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多