因此,我正在做关于超分辨率算法对AlexNet标记图像的准确率的影响的硕士学位论文。我将Matlab与AlexNet的预训练版本一起使用。
问题是,通过使用
[label, scores] = classify(net, 'image')
我只得到一个标签,而我想得到多个标签,例如5个标签,以及AlexNet提供的相应分数。
我不知道该怎么做,如果有人至少可以给我一个提示,我将非常感谢。
最佳答案
scores
矩阵告诉您分类数据时每个班级的得分。具体来说,每列i
告诉您在尝试使用类i
对输入进行分类时,第i
类的分数如何合理。每一行是AlexNet的一个输入。
如果要获得每个输入的最高k
分数,可以sort
-专门查看第二个输出变量,并分别对每一行进行排序。之后,您可以提取结果的前k
列,该列告诉您与输入关联的前5类或标签。如果您担心实际的类,请查看第一个输出。
% First classify the image(s) you would like
[label, scores] = classify(net, ...);
k = 5; % We want 5 classes
[scores_sorted, classes] = sort(scores, 2); % Sort each row individually
scores_sorted = scores_sorted(:, 1 : k);
classes = classes(:, 1 : k);
scores_sorted
和classes
现在将为您提供k
列矩阵,其中每一行告诉您分配给每个输入的顶级k
类(存储在classes
中)以及AlexNet(scores_sorted
)。为了最终确定实际的类,在创建AlexNet时,最后一层具有分类类别。假设您创建了默认网络:
net = alexnet;
...您可以通过以下方式确定每个标签ID的类:
c = net.Layers(end).ClassNames;
这是一个单元格类数组,总共应该有1000个元素。因此,根据我上面编写的代码中的classes变量,您可以执行以下操作:
out = net.Layers(end).ClassNames(classes);
因此,将使用
classes
索引到单元格数组,从而为您提供一个N x k
单元格数组,其中该单元格数组中的每一行告诉您AlexNet为每个输入图像的前k
类分配的标签。关于image - 如何从AlexNet获取多个图像标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44398859/