因此,我正在做关于超分辨率算法对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_sortedclasses现在将为您提供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/

10-09 03:04