桁分類コードを整理中です。そこで、「7」などの数字のイメージを入力すると、10 の確率 (合計が 1 になる) が得られます。アルゴリズムがうまく機能している場合、7 番目の要素の値が最も高くなるはずです。
さらに複雑なのは、100 個の要素のバッチを処理していることです。したがって、実際には、各行の合計が 1 になる COLxROW = 100x10 MATRIX があります。
ここで、これらの 100 個の分布のそれぞれからサンプリングしたいと考えています。つまり、確率分布に従って、バッチ項目ごとに [0 0 0 1 0 0 0 0 0] (つまり 3) のようなベクトルを生成する必要があります。
既存の実装は次のとおりです。
samp = pd*0;
layers = cumsum( pd, 2 );
randoms = rand( batchSize, 1 );
for k = 1:batchSize
index = find( randoms(k) <= layers(k,:), 1 );
samp( k, index ) = 1;
end
ただし、明示的なループは避けたいと思います (私が読んだように、パフォーマンスが低下することがよくあります)。
このルーチンは最もタイトなループで実行されるため、効率が重要です。
これを効率的に達成する方法は?
編集私は私の質問に答えようとします.誰かが答えを改善できる場合に備えて投稿しています(MatLabで猫の皮をむく方法はほとんど常に複数あります).