此刻,我正在使用Keras,sci-kit学习等进行图像分类。
我将尝试解释所有问题。 就像我之前说的,这是带有多标签的图像分类。 我的数据框包含4000个微观油样,标签表示当前样品中的一些颗粒。我将在下面举一个例子。
好吧,数据帧中的所有图像都被标记了。想象一下,每个图像包含一个具有13个值的数组,这些值已经是二进制的,当然,正数为1,负数为0。
例如
@"VEN.*(?=\\)"
这意味着对于每个图像,可能会有多个输出,在这种情况下,目标是将一个油样提供给CNN,并且可以返回图像中存在的颗粒。
我不知道是否足够清楚,对不起,现在我将解释我的真正问题。
在我的CNN中,我已经将输出层设置为13(紧随每个图像中的标签数量之后)。 我不知道为什么,但是当我训练模型时,预测的Y仅返回一个值,例如:
[0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0]
我需要获得具有多个输出的谓词,例如:
Y predicted (sample 14): 3
Y predicted (sample 65): 11
我需要帮助来解决此问题,因为我坚持了很长时间。如果有人知道此策略,我将不胜感激。
谢谢!
答案 0 :(得分: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