TensorFlow Keras 多分类,准备什么数据集?

TensorFlow Keras multi classification, what datasets to prepare?

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

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

你可以尝试有 2 个输出神经元,比如狗和猫,当用狗图片训练它时,你将预期输出设置为 10,将猫设置为 01,但是当给定一张既没有猫也没有狗的图片时,这似乎不太可能或将输出 00.

它很有可能会奏效,我目前正在使用 MNIST Fashion 数据集做作业,输出是 10 classes,我一直使用 ReLu(这意味着输出是0 to infinity, not 0 to 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输入,很可能输出会接近 0。你的问题是输出很可能不为零,你将不得不决定一些截止点,它不太可能是狗或猫。

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

让我们从“dog”或“cat”的二进制 classifier 开始

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

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

或者,

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

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

将来,如果有人添加,比如说horse(连同dogcat),代码需要修改。在 long 运行.

中,这似乎是一种不必要的复杂性