【问题标题】:TensorFlow Keras multi classification, what datasets to prepare?TensorFlow Keras 多分类,要准备什么数据集?
【发布时间】:2026-01-04 15:05:01
【问题描述】:

例如,如果我想训练一个模型来分类“狗”、“猫”和“既不是狗也不是猫”。 我是否需要为“既不狗也不猫”准备数据集? 有没有办法只用“狗”和“猫”数据集来完成它?

【问题讨论】:

    标签: tensorflow keras logistic-regression multiclass-classification


    【解决方案1】:

    是的,建议标记数据具有“其他”类型,并添加一个额外的输出神经元来推断other 类型

    让我们从“狗”或“猫”的二元分类器开始

    1. 大部分softmax激活用于输出层
    2. 它将结果归一化为两个类之一
    3. 帮助用户轻松决定选择

    现在让我们为“other”添加第三个神经元,我们需要一些数据来正确激活“other”

    或者,

    1. 使用带有两个神经元的 sigmoid
    2. 调整预测阈值,如果dogcat 都低于它们的阈值,则发出neither

    虽然这种替代方法有效,但可能不建议这样做,因为模型范围之外的自定义逻辑会推断出额外的类(模型不知道)。

    将来,如果有人添加,比如说horse(以及dogcat),则需要修改代码。从长远来看,这似乎是不必要的复杂性。

    【讨论】:

    • 刚刚学习的 sigmoid 可以与多个神经元一起使用。谢谢你的回答!
    • @Asagao,谢谢。我们可以将输出层中的 sigmoid 视为一个自变量(不关心输出层中其他神经元的状态)。通常不建议进行分类,因为它增加了开发人员在single-label(multiclass) 的情况下管理阈值的责任。一般来说,从长远来看,softmax 可能有助于单标签。如果您正在处理 multi-label,那么 sigmoid 可能是比 softmax 更好的选择。免责声明:我是这个领域的初学者。
    • @Asagao,更清楚您的陈述并消除任何误解。 just learned sigmoid can be used with multiple neurons: sigmoid 只对单个神经元起作用。只是我们在输出中有多个神经元,每个神经元都有一个 sigmoid 激活。每个 sigmoid 激活的输出神经元都独立于其他神经元。他们甚至不知道其他人的存在。其中,“softmax”必须了解所有神经元,才能在概率分布 (0..1) 下对所有可能的输出进行归一化。
    • 非常感谢您的进一步澄清,明白“只是我们在输出中有多个神经元,每个神经元都有一个 sigmoid 激活”。
    • 太棒了。祝你有美好的一天
    【解决方案2】:

    是的,您应该拥有全部 3 个。 从理论上讲,您可以只使用 2 进行训练,然后声称如果两个 logit 都较低,则“两者都不是”。但是,您至少需要“两者都不” DS 来验证您的模型是否有效。 此外,如果使用 3 组训练,训练起来会更加健壮和快速。

    【讨论】:

    • 感谢您的及时建议。我怎么知道多类分类中的“logits 低”,因为 softmax 激活函数会带来 1 个总和输出?
    【解决方案3】:

    您可以尝试使用 2 个输出神经元,例如狗和猫,并在使用狗图片训练它时,将预期输出设置为 10,将猫设置为 01,但如果给定的图片既没有猫也没有狗,也不会出现,这似乎不太可能输出 00。

    很有可能它可以工作,我目前正在使用 MNIST 时尚数据集做作业,输出是 10 个类,我一直使用 ReLu(意味着输出是 0 到无穷大,而不是 0 到1) and when class 7 is selected, usually the output layer will be [0 0 0 0 0 0 some high value 0 0 0], that means if I was to feed some arbitrary input, most likely the output would be close to 0 . 对你来说问题是输出很可能是非零的,你必须决定一些临界值,它不太可能是狗或猫。

    【讨论】:

      最近更新 更多