因此,我正在研究Master解決超分辨率算法對AlexNet圖像標籤準確率的影響。我正在使用預先訓練版本的AlexNet的Matlab。如何從AlexNet獲得多個圖像標籤
的問題是,通過使用
[label, scores] = classify(net, 'image')
我只得到一個標籤,而我想獲得多個標籤,例如,五,他們通過AlexNet相應的分數。
我不知道該怎麼做,如果有人能給我,至少是一個暗示,我真的非常感謝。
因此,我正在研究Master解決超分辨率算法對AlexNet圖像標籤準確率的影響。我正在使用預先訓練版本的AlexNet的Matlab。如何從AlexNet獲得多個圖像標籤
的問題是,通過使用
[label, scores] = classify(net, 'image')
我只得到一個標籤,而我想獲得多個標籤,例如,五,他們通過AlexNet相應的分數。
我不知道該怎麼做,如果有人能給我,至少是一個暗示,我真的非常感謝。
scores
矩陣會告訴您每個類在分類數據時如何得分。具體而言,每列i
都會告訴您如何在嘗試使用i
類別對輸入進行分類時得到i
th級別的分數。每行都是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
列矩陣,其中的每一行告訴您分配給每個輸入(存儲在classes
)頂部k
類以及由AlexNet(scores_sorted
)中提供的分數。
爲了最終確定實際的類是什麼,當您創建AlexNet時,最後一層包含分類類別。假設你創建的默認網:
net = alexnet;
...你能確定哪些類是通過每一個標籤ID:
c = net.Layers(end).ClassNames;
這是類的單元陣列,並且應該有總共1000個元素。因此,給定從我上面寫的代碼變量的類,則可以由此做到:
out = net.Layers(end).ClassNames(classes);
classes
將因此可用於索引到單元陣列,它會因而會給你N x k
單元陣列的每一行,其中在這個單元格陣列中告訴您由AlexNet爲每個輸入圖像的頂部k
類指定的標籤。
哇,這很快,非常感謝你:))我明白,分數矩陣與不同的類相關聯,但我不知道如何。它們是否以某種方式與預先訓練的AlexNet的1000個類別(或同義詞)的列表相關?有沒有將課程映射到分數的方法? –
'classes'會給你一個整數索引,你可以用它來索引由AlexNet提供的實際分類數據。例如,如果AlexNet將輸出分配爲類400,則這意味着它屬於類別400,假定您使用了ILSVRC2010數據。將課程映射到分數已經爲您完成。 '分數'給你分配給AlexNet的分數,而'分類'給你如何爲每個分配輸入的相應分數。 – rayryeng
問題是,當使用matlab的'classify'函數時,我只能得到1個標籤(即一個類或synset),但我不知道如何獲得更多的標籤。你似乎不情願地說我可以得到一個名爲'class'的變量,其中所有的類都將根據ILSVRC2010進行定義,但我不知道如何去做。如果你能告訴我如何在matlab中做到這一點,我會非常感激。謝謝,真的,非常想幫我:) –