社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Mitiku

Mitiku 最近创建的主题
Mitiku 最近回复了
6 年前
回复了 Mitiku 创建的主题 » 在深度学习模式上从未见过的课程

在讨论解决方案之前,我将首先对问题的建议解决方案发表评论。第一种解决方案比第二种解决方案效果更好。这是因为很难解释神经网络输出的(概率)值。值的接近可能是由涉及的类的相似性造成的(在本例中,狗可能看起来像猫)。有时,你可能最终会得到一些看不见的类被分配到其中一个概率很高的类中。

大多数监督分类机器学习算法的设计是为了将输入映射到一些固定数量的类中的一个。这种分类称为 封闭世界分类 .
例如。

  • MNIST -手写数字分类
  • 猫-狗 分类

当分类涉及一些未标记/未知的类时,这种方法称为开放世界分类。出版了各种各样的论文[ 1 , 2 , 3 ]

我将使用 . 有两个选项可以将开放世界分类(这里我将参考OWC)应用到问题中。

  1. 将所有新类分类为单个类
  2. 将所有新类分类为单个类,然后将相似的样本进一步分组为单个类,将不同的样本分组为不同的类。

1。将所有新类分类为单个类

尽管有许多类型的模型可以适合这种类型的分类(其中一个可能是问题提出的第一个解决方案),我将讨论 . 在这里,网络首先决定对输入进行分类或拒绝输入。理想情况下,如果样本来自可见类,那么网络将划分为一个可见类。另一方面,网络拒绝。作者 称此网络为开放分类网络(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)

该模型以一种联合优化这两个方面的方式进行训练。 reject_output classification_output 损失。

2。将所有新类分类为单个类,然后进一步分组相似的

作者 使用另一个网络来查找样本之间的相似性。他们称之为网络成对分类网络(PCN)。PCN对两个输入是来自同一类还是不同类进行分类。我们可以使用 embedding 第一个解决方案,并使用成对相似性度量来创建PCN网络。在PCN中,两个输入的权重是共享的。这可以通过使用KERA来实现。

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模型为距离函数,对未知类进行聚类。