Keras中具有二进制分类的多标签

问题描述 投票:0回答:1

此时,我使用Keras进行图像分类,sci-kit学习等。

我会尝试解释所有问题。就像我之前说过的那样,它是一个带有多标签的图像分类。我的数据框包含4000个微观油样,标签代表当前样本中的一些颗粒。我将在下面举一个例子。

好吧,数据框中的所有图像都被标记了。想象一下,每个图像包含一个具有13个值的数组,已经是二进制的,当然,1表示正数,0表示负数。

EG

[0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0]

这意味着对于每个图像,可能有多个输出,在这种情况下,目标是给CNN一个油样,并且可以返回图像中存在的粒子。

我不知道它是否足够清楚,对不起,现在我将解释我的真正问题。

在我的CNN中,我已经将输出图层设置为13(遵循每个图像中的标签数量)。我不知道为什么,但是当我训练模型时,预测的Y只返回一个值,例如:

Y predicted (sample 14): 3
Y predicted (sample 65): 11

我需要通过多输出获得预测,例如:

Y predicted (sample 14): 3, 7, 9, 12
Y predicted (sample 65): 5, 8, 9, 11

我需要帮助来解决这个问题,因为我坚持了很长时间。如果有人知道这个策略我很感激。

提前致谢!

python keras neural-network multilabel-classification
1个回答
2
投票

您的问题称为多标签分类。这意味着模型输出中的多个类可以一次存在,而不仅仅是一个。

给定预测矢量,您可以通过应用阈值来获取单个类:

thresh = 0.5
p = model.predict(some_input)
classes = []
for prob, idx in enumerate(p):
    if prob > thresh:
        classes.append(idx)

print(classes)

执行此操作后,您将获得具有不同类的可变大小的向量,如模型所预测的。阈值(阈值)是您必须使用应用于每个类的二进制分类的性能指标进行调整的参数。您还可以为每个类设置不同的阈值。

阈值是你必须调整的东西。现在你将得到一个0和1的向量,其中0 in

© www.soinside.com 2019 - 2024. All rights reserved.