質問: ソフトマックス層で2番目に大きな確率を取るラベルを確認する方法はありますか? 分類用の畳み込みニューラルネットワークに関する質問になります。 https://jp.mathworks.com/help/deeplearning/examples/create-simple-deep-learning-network-for-classification.html 入力データに対してソフトマックス層では最も大きな確率をとるラベルを出力するようになっていると思うのですが、 2番目に大きな確率をとるラベルを確認する方法はありますでしょうか。 (例)数字8のイメージデータに対して、ソフトマックス層でラベル「8」を出力した時に2番目に大きな確率をとるラベル「9」を確認する。 ご教示ください。 よろしくお願いいたします。
回答: ラベルの「確認」がどんな処理か分かりませんが、泥臭い方法でよければ思いつきます。 まず提示いただいた例題ですと 最後の ypred = classify(net,imdsvalidation); の代わりに scores = activations(net,imdsvalidation,'softmax','outputas','columns'); と実行すれば各ラベル毎の確率にあたるモノを出力できます。 ここから例えば [sortedscore,i] = sort(scores,'descend'); とソートします。 第二出力 i を追うことで、2番目に数値が高かったラベルを認識できます。 例えば labels = net.layers(15).classes; firstpred = labels(i(1,:)); % 1番目ラベル secondpred = labels(i(2,:)); % 2番目のラベル といった具合です。 isequal(firstpred,ypred) とすれば ypred = classify(net,imdsvalidation); で計算された ypred と firstpred が同値であることが確認できます。