Показать все прогнозы и их проценты в заголовке рисунка - PullRequest
0 голосов
/ 21 марта 2019

Я работаю над проектом по глубокому обучению. У меня есть две переменные для хранения прогнозов и их процентов. Это делается с помощью цикла for для каждого изображения в массиве ячеек C. И прогнозы, и проценты хранятся в отдельных векторах столбцов, которые понадобятся для дальнейшего использования

for i=1:size(C)

img=im2uint8(C{i});
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

А (после модификации) цифра

Итак, моя цель - написать название так:

Побрежье 0,45644%; Улица 99,5436%

1 Ответ

0 голосов
/ 21 марта 2019

Учитывая переменные, описанные выше, вы можете использовать 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 корректно работать с различными типами значений - этонемного хакерский, но часто MATLAB.Если я найду более хороший способ, я обновлю ответ.

Если вам не нужен последний «;» в конце строки, вы можете обрезать его с помощью следующего шага.

...