我想创建一个狗分类器,它输出包含狗的图像的概率。
我有两种方法-
二元分类器(1-class),它只输出图像包含狗的概率。这在我看来是合理的。
2 类分类器,两个类分别表示“狗”和“非狗”。但我对这种方法的问题是神经网络也必须学习“非狗”类,这是不可能的,因为它没有模式并且在每个训练示例中都不同。
第二种方法会不如第一种有效吗?甚至根本工作?
我想创建一个狗分类器,它输出包含狗的图像的概率。
我有两种方法-
二元分类器(1-class),它只输出图像包含狗的概率。这在我看来是合理的。
2 类分类器,两个类分别表示“狗”和“非狗”。但我对这种方法的问题是神经网络也必须学习“非狗”类,这是不可能的,因为它没有模式并且在每个训练示例中都不同。
第二种方法会不如第一种有效吗?甚至根本工作?
您提到的两种方法同样有效。
首先,我假设您指的是神经网络类型的模型。您应该注意,卷积神经网络是判别模型,这意味着它们经过训练可以找到两个类别之间的差异(例如dog和not-dog)。
第二种方法会不如第一种有效吗?
只是为了反驳这种说法,请考虑以下内容。您有一个 2 输出分类网络;让我们将输出命名为dog和not-dog。现在想象一下,正如你所说,网络只能识别狗的模式。它所要做的就是为狗类的这些模式赋予正权重,为非狗类赋予负权重。从这个意义上说,非狗类将被训练为与狗类相反,这不会使其不如单输出二元分类器有效。
即使not-dog类无法训练并保持不变,由于我们使用的是 softmax 激活,预测也将仅通过dog输出和恒定not-dog输出之间的相对差异来生成。这就像拥有一个单输出二元分类器。
您可以使用异常检测自动编码器架构。基本上,你要做的是,
创建具有卷积层的自动编码器架构。
我们在狗的图像上训练模型。
所以当我们在训练好的自动编码器上喂狗的图像时,它会产生相对较小的损失。
当将狗以外的图像喂给模型时,损失值会很高。
因此,我们可以使用损失值检测图像中是否存在狗。
二元分类是二分类。您列出的区别实际上是软分类和硬分类之间的区别。在软分类中,您在所有类上都有一个连续分布,在硬分类中,输出是一个单热编码向量。
在某些时候,您的模型必须能够表达某种分类(“狗”或“非狗”),因此无论如何您最终都会得到硬分类。
同意 Schubam 的回答,将其视为异常检测系统,仅对狗图像进行训练,并将任何具有高损失的图像标记为非狗图像。是的,使用 2 类狗和非狗,就像癌症检测一样。