【发布时间】:2026-01-04 15:05:01
【问题描述】:
例如,如果我想训练一个模型来分类“狗”、“猫”和“既不是狗也不是猫”。 我是否需要为“既不狗也不猫”准备数据集? 有没有办法只用“狗”和“猫”数据集来完成它?
【问题讨论】:
标签: tensorflow keras logistic-regression multiclass-classification
例如,如果我想训练一个模型来分类“狗”、“猫”和“既不是狗也不是猫”。 我是否需要为“既不狗也不猫”准备数据集? 有没有办法只用“狗”和“猫”数据集来完成它?
【问题讨论】:
标签: tensorflow keras logistic-regression multiclass-classification
是的,建议标记数据具有“其他”类型,并添加一个额外的输出神经元来推断other 类型
让我们从“狗”或“猫”的二元分类器开始
softmax激活用于输出层现在让我们为“other”添加第三个神经元,我们需要一些数据来正确激活“other”
或者,
dog 和cat 都低于它们的阈值,则发出neither
虽然这种替代方法有效,但可能不建议这样做,因为模型范围之外的自定义逻辑会推断出额外的类(模型不知道)。
将来,如果有人添加,比如说horse(以及dog 和cat),则需要修改代码。从长远来看,这似乎是不必要的复杂性。
【讨论】:
single-label(multiclass) 的情况下管理阈值的责任。一般来说,从长远来看,softmax 可能有助于单标签。如果您正在处理 multi-label,那么 sigmoid 可能是比 softmax 更好的选择。免责声明:我是这个领域的初学者。
just learned sigmoid can be used with multiple neurons: sigmoid 只对单个神经元起作用。只是我们在输出中有多个神经元,每个神经元都有一个 sigmoid 激活。每个 sigmoid 激活的输出神经元都独立于其他神经元。他们甚至不知道其他人的存在。其中,“softmax”必须了解所有神经元,才能在概率分布 (0..1) 下对所有可能的输出进行归一化。
是的,您应该拥有全部 3 个。 从理论上讲,您可以只使用 2 进行训练,然后声称如果两个 logit 都较低,则“两者都不是”。但是,您至少需要“两者都不” DS 来验证您的模型是否有效。 此外,如果使用 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 . 对你来说问题是输出很可能是非零的,你必须决定一些临界值,它不太可能是狗或猫。
【讨论】: