scores 矩阵告诉您在对数据进行分类时每个类别的得分情况。具体来说,i 的每一列都会告诉您在尝试使用类 i 对输入进行分类时,ith 类的得分是如何变化的。每一行都是 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 类分配的标签每个输入图像。