Nik*_*hra 2 classification machine-learning neural-network deep-learning keras
我有一个基本问题。据说我正在训练猫和狗的图像分类器。但我需要一个额外的功能。如果图像不属于任何类别,我如何才能知道它。我想到的一些选择是:
但我认为任何方法都不可行。
谁能建议我一种好的技术来对不属于我的训练类别的图像进行分类?
在讨论解决方案之前,我首先对问题的建议解决方案进行评论。与第二个解决方案相比,第一个解决方案效果更好。这是因为解释神经网络输出的(概率)值非常困难。值的接近可能是由涉及的类的相似性引起的(在这种情况下,狗可能看起来像猫)。有时,您可能最终会将看不见的类别分配给高概率的类别之一。
大多数监督分类机器学习算法旨在将输入映射到某些固定数量的类别之一。这种类型的分类称为封闭世界分类。
例如
当分类涉及一些未标记/未知的类时,该方法称为开放世界分类。发表论文多篇[ 1,2,3 ]。
我将使用3提出的解决方案来解释我的解决方案。有两个选项可以将开放世界分类(这里我将参考 OWC)应用于所讨论的问题。
尽管可能有许多类型的模型适合这种类型的分类(其中一个可能是问题提出的第一个解决方案。)我将讨论 3的模型。这里,网络首先决定对输入进行分类或拒绝。理想情况下,如果样本来自已见类别,则网络将分类为已见类别之一。否则网络会拒绝。3的作者将这个网络称为开放分类网络(OCN)。OCN 的 Keras 实现可能是(我简化了网络,只关注模型的输出。
inputs = keras.layers.Input(shape=(28, 28,1))
x = keras.layers.Conv2D(64, 3, activation="relu")(inputs)
x = keras.layers.Flatten()(x)
embedding = keras.layers.Dense(256, activation="linear", name="embedding_layer")(x)
reject_output = keras.layers.Dense(1, activaton="sigmoid", name="reject_layer")(embedding)
classification_output = keras.layers.Dense(num_of_classes, activaton="softmax", name="reject_layer")(embedding)
ocn_model = keras.models.Model(inputs=inputs, outputs=[reject_output, classification_output)
Run Code Online (Sandbox Code Playgroud)
reject_output该模型以联合优化和损失的方式进行训练classification_output。
3的作者使用另一个网络来查找样本之间的相似性。他们将该网络称为成对分类网络(PCN)。PCN 对两个输入是来自同一类还是不同类进行分类。我们可以使用embedding第一个解决方案并使用成对相似性度量来创建 PCN 网络。在 PCN 中,两个输入共享权重。这可以使用 keras 来实现
embedding_model = keras.layers.Sequential([
keras.layers.Conv2D(64, 3, activation="relu", input_shape=(28, 28,1))
keras.layers.Flatten(),
embedding = keras.layers.Dense(256, activation="linear", name="embedding_layer")
])
input1 = keras.layers.Input(shape=(28, 28, 1))
input2 = keras.layers.Input(shape=(28, 28, 1))
embedding1 = embedding_model(input1)
embedding2 = embedding_model(input2)
merged = keras.layers.Concatenate()([embedding1, embedding2])
output = keras.layers.Dense(1, activation="sigmoid")(merged)
pcn_model = keras.models.Model(inputs=[input1, input2], outputs=output)
Run Code Online (Sandbox Code Playgroud)
PCN模型将被训练以减少相同类别之间的距离并增加不同类别之间的距离。
PCN 网络经过训练后,自动编码器将被训练以从未见过的类中学习有用的表示。然后利用PCN模型作为距离函数,使用聚类算法对未见过的类进行分组(聚类)。
| 归档时间: |
|
| 查看次数: |
2837 次 |
| 最近记录: |