在图形标题中显示所有预测及其百分比

Posted

技术标签:

【中文标题】在图形标题中显示所有预测及其百分比【英文标题】:Display all predictions and their percentages in the title of a figure 【发布时间】:2019-08-12 03:55:52 【问题描述】:

我正在从事一个深度学习项目。我有两个变量用于存储预测及其百分比。 这是对单元格数组 C 中的每个图像使用 for 循环来完成的。预测和百分比都存储在单独的列向量中,供以后使用

for i=1:size(C)

img=im2uint8(Ci);
img2=imresize(img,[224 224]);
[prediction,pred_val] = classify(n_net,img2)
predictions(i,:)=prediction;
pred_vals(i,:)=pred_val;
figure
imshow(img2)

title(sprintf("%s %s",[labels,num2str(100*pravdepodobnost_predikciesnimky(i,:))]));
end

现在,我想显示所有预测和百分比,假设网络预测图像包含 80% 的海洋和 20% 的人,因此图中的标题显示了这两种预测,而不仅仅是占主导地位的预测。哪种方法最好?

编辑:这里是一个澄清示例(标题和标签是我的母语):

labels=string(categories(scenes_training.Labels)') %creates 1x2 string array
labels = 
"Pobrežie"    "Ulica"

从上面的 for 循环进行一次迭代后,我得到了这个:

prediction = categorical
 Ulica

pred_vals = 1×2 single row vector    
0.0046    0.9954

和(修改后)figure

所以我的目标是这样写标题:

波布雷热 0.45644 %;乌利卡 99.5436 %

【问题讨论】:

了解predictions 中的数据是什么样子会有所帮助(pred_vals 相当明显)。 @EuanSmith 它是一个只有一列的列字符串向量(所以是一个 nx1 矩阵),每次迭代都会对预测进行排序,它看起来像这样: sea sea people sea people sea ,不能在这里写作为一列 【参考方案1】:

鉴于上述变量,您可以使用sprintf 做您想做的事。

% Use the dummy data from above
labels = ["Pobrežie", "Ulica"];
pred_vals = [0.0046, 0.9954];
% now format a string to use as a title
img_title=sprintf("%s %s%%; ", [labels', num2str(100*pred_vals')]');
%img_title now equals "Pobrežie  0.46%; Ulica 99.54%; "

基本上 sprintf 将循环遍历它提供的所有值,重复字符串格式直到完成。您可以使用它来列出数据矩阵的内容。将数据放入矩阵并转置只是一种将名称和值交错的方式。

sprintf 输入参数中的嵌套转置只是为了说服 matlab 正确处理不同的值类型 - 这有点 hacky 但 MATLAB 通常是。如果我能找到更好的方法,我会更新答案。

如果您不希望最后的“;”出现在字符串的末尾,那么您可以通过后续步骤将其剪掉。

【讨论】:

我想我忘了提到 pred_vals 是一个 nx2 向量,有两列代表两个类(或标签)(例如,第一个预测是 sea,它的 pred_val 可能是 0.9 0.1)。而且我只是意识到完全不可能(?)做我想做的事,或者我需要使用训练阶段存储的标签? 我刚刚创建了一个名为标签的新变量,它是一个包含 'sea' 'people' 的 1x2 字符串矩阵。现在它应该可以工作,以便标签中的每一行都与 pred_vals 中的每一行相关联,但是我得到错误 using horzcat 连接的数组的尺寸不一致。 @DenisBenka 提供一些用真实数据填充变量的虚拟代码,并给出一个您希望输出的示例 - 这使得问题非常清晰。我相信有办法做到这一点。 我做到了!我对您的解决方案进行了一些更改以使用循环并且它有效。标题如下所示: title(sprintf("%s %s%%; ", [labels', num2str(100*pred_vals(i,:)')]')); 非常感谢。我对那么多转置矩阵不太好.. :-)

以上是关于在图形标题中显示所有预测及其百分比的主要内容,如果未能解决你的问题,请参考以下文章

输入值以百分比返回预测[关闭]

输出百分比“可能性”的预测模型?

使用自己的 Java 代码和模型在 WEKA 中获取预测百分比

还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵

Python NLTK:如何在分类器预测中检索百分比置信度

Weka 预测(百分比置信度) - 这是啥意思?