scores
マトリックスは、データを分類する際に各クラスがどのようにスコア付けしたかを示します。具体的には、各列i
は、クラスi
で入力を分類しようとしたときにi
クラスのスコアがどのように計算されたかを示しています。各行はAlexNetへの入力です。
各入力に対して上位k
のスコアを取得する場合は、sort
とすることができます。具体的には、2番目の出力変数を見て、各行を個別に並べ替えます。その後、最初に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を作成するときに最終層に分類のカテゴリがあります。デフォルトのネットを作成すると仮定すると:これは、クラスのセル配列で、そこにあるべき
c = net.Layers(end).ClassNames;
:
net = alexnet;
を...あなたはによってクラスが各ラベルのIDのためのものであるかを判断することができます合計で1000要素。
out = net.Layers(end).ClassNames(classes);
classes
は、このように、セル配列のインデックスに使用されると、それはこのようにあなたの各行N x k
セル配列を与えるだろう。したがって、私はあなたがこれを行うことができ、上記の書いたコードから、変数のクラスを与えられましたこのセル配列には、入力画像ごとに上位k
クラスのAlexNetによって割り当てられたラベルが表示されます。
すばらしかった、ありがとう):)スコアマトリックスはさまざまなクラスに関連付けられていることを理解していますが、どのようにしたらよいか分かりません。彼らは事前に訓練されたAlexNetの1000のクラス(またはsynsets)のリストに何らかの形で関係していますか?クラスをスコアにマッピングする方法はありますか? –
'class'は、AlexNetが提供する実際のカテゴリデータにインデックスを付けるために使用できる整数インデックスを与えます。たとえば、AlexNetが出力をクラス400として割り当てた場合、これはILSVRC2010データを使用したと仮定すると、カテゴリ400に属するものであることを意味します。スコアにクラスをマッピングすることは既にあなたのために行われています。 'scores'はAlexNetに割り当てられたスコアを返しますが、' classes'は各クラスがどのように入力を割り当てたかを示します。 – rayryeng
問題は、matlabの 'classify'関数を使用すると1つのラベル(つまり、1つのクラスまたはsynset)しか得られませんが、もっと多くのものを得る方法はわかりません。あなたは私が 'class'という変数を得ることができないと思います。すべてのクラスはILSVRC2010に従って定義されますが、どうやってそれを行うのか分かりません。私はあなたが私にmatlabでそれを行う方法を教えることができたら、私は本当に感謝します。ありがとう、本当に、私を助けたいと思って非常に多くの: –