Machine learning 以前从未见过的深度学习模式课程
我有一个基本问题。据说我正在为猫和狗训练一个图像分类器。但我需要一个额外的功能。如果图像不属于任何类别,我如何知道它。我考虑的一些选择是:Machine learning 以前从未见过的深度学习模式课程,machine-learning,keras,neural-network,deep-learning,classification,Machine Learning,Keras,Neural Network,Deep Learning,Classification,我有一个基本问题。据说我正在为猫和狗训练一个图像分类器。但我需要一个额外的功能。如果图像不属于任何类别,我如何知道它。我考虑的一些选择是: 我在最后一层添加了第三个神经元,而不是两个神经元。把我的训练标签y作为3个标签的一个热编码,第三个是不在猫或狗类中。我将在我的第三节课上使用一些随机的例子 我将只使用2个神经元,并使用一些概率阈值,我将使用它来告诉我的图像应该属于哪个类 不过,我认为任何方法都不可行 有谁能给我推荐一种好的方法来对不属于我的培训类别的图像进行分类吗?在讨论解决方案之前,我首先
有谁能给我推荐一种好的方法来对不属于我的培训类别的图像进行分类吗?在讨论解决方案之前,我首先对建议的问题解决方案进行评论。第一种解决方案比第二种更有效。这是因为很难解释神经网络输出的(概率)值。值的接近性可能是由涉及的类的相似性引起的(在这种情况下,狗可能看起来像猫)。有时,您可能最终会将看不见的类分配给其中一个类,这种可能性很高 大多数有监督分类机器学习算法都是为了将输入映射到某个固定数量的类中。这种类型的分类称为封闭世界分类
例如
- MNIST-手写数字分类
- 猫狗分类
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)
该模型以一种联合优化拒绝输出
和分类输出
损失的方式进行训练
2.将所有新类分类为单个类,然后进一步分组相似类
该研究的作者使用另一个网络来发现样本之间的相似性。他们称之为成对分类网络(PCN).PCN对两个输入是来自同一类还是不同类进行分类。我们可以使用第一个解决方案的嵌入
,并使用成对相似性度量来创建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)
将对PCN模型进行训练,以缩短与同一类的距离,增加不同类之间的距离
PCN网络经过训练后,自动编码器经过训练,从看不见的类中学习有用的表示形式。然后使用聚类算法,以PCN模型作为距离函数,对看不见的类进行分组(聚类)。这取决于您的数据。如果您能为第三类制作足够的数据集,它可以方便地工作。(bc不需要调整阈值,但对于后一个,您应该调整。)当您没有足够的数据用于第三类时,我建议在第一个选项“将所有新类分类为单个类”中使用后一个,而不是前一个,我有一个问题。我正在使用的数据是有标签的,如果是未知样本,我们是否也使用这些样本进行训练?如果是这种情况,在一个热编码的目标类中,我们是否在每个类中都有
0
的样本以使它们成为未知的,或者我们是否有一个新的类“未知”要将这些图像标记为?@rshah,要使用第一个解决方案yes,您需要将未看到的图像标记为“未知”类。