2017-07-30 3 views
1

私はpredに各質問の最大得点を持つインデックスを格納し、それを文字列に変換する次のコードを持っています。torch/lua:テンソルからnベストのサブセットを取得

最高のスコアを持つ単一のインデックスだけでなく、各質問のnベストインデックスの場合も同じことを行い、それらを文字列に変換したいと思います。私はまた、各インデックス(または各変換された文字列)のスコアを表示したい。

したがってscoresはソートする必要があり、predは1 x nqsではなく複数の行/列でなければなりません。 の各エントリの対応するscoreの値は取得可能でなければなりません。

私はルア/トーチの構文については無知です。どんな助けでも大歓迎です。ここで

nqs=dataset['question']:size(1); 
scores=torch.Tensor(nqs,noutput); 
qids=torch.LongTensor(nqs); 
for i=1,nqs,batch_size do 
    xlua.progress(i, nqs) 
    r=math.min(i+batch_size-1,nqs); 
    scores[{{i,r},{}}],qids[{{i,r}}]=forward(i,r); 
end 

tmp,pred=torch.max(scores,2); 

answer=json_file['ix_to_ans'][tostring(pred[{i,1}])] 
print(answer) 
+1

答えが間違っているか不明な点がある場合は、お気軽に教えてください。ありがとう! – Ash

答えて

1

が私の試みですが、私は単純無作為scoresテンソルを使用して、その動作を示します。

> scores=torch.floor(torch.rand(4,10)*100) 
> =scores 
9 1 90 12 62 1 62 86 46 27 
7 4 7 4 71 99 33 48 98 63 
82 5 73 84 61 92 81 99 65 9 
33 93 64 77 36 68 89 44 19 25 
[torch.DoubleTensor of size 4x10] 

、あなたは各質問(行)のためのN最高のインデックスをしたいから、の各行を並べ替えてみましょう

> values,indexes=scores:sort(2) 

、のリターンテンソルが含まれているものを見てみましょう:テンソルの

> =values 
    1 1 9 12 27 46 62 62 86 90 
    4 4 7 7 33 48 63 71 98 99 
    5 9 61 65 73 81 82 84 92 99 
    19 25 33 36 44 64 68 77 89 93 
    [torch.DoubleTensor of size 4x10] 

> =indexes 
    2 6 1 4 10 9 5 7 8 3 
    2 4 1 3 7 8 10 5 9 6 
    2 10 5 9 3 7 1 4 6 8 
    9 10 1 5 8 3 6 4 7 2 
    [torch.LongTensor of size 4x10] 

ご覧のように、valuesi-th行がindexesscoresi-th列、および各列のソートされたバージョン(昇順で)ではあなたに対応するインデックスを与えます。

することはできN=3で、のは、与えられた、たとえば、それらの値を見てみましょう

> N_best_indexes=indexes[{{},{indexes:size(2)-N+1,indexes:size(2)}}] 
> N_best_values=values[{{},{values:size(2)-N+1,values:size(2)}}] 

と各質問(すなわち行)のためN最高値/インデックスを取得:だから

> return N_best_indexes 
7 8 3 
5 9 6 
4 6 8 
4 7 2 
[torch.LongTensor of size 4x3] 

> return N_best_values 
62 86 90 
71 98 99 
84 92 99 
77 89 93 
[torch.DoubleTensor of size 4x3] 

を質問jk-thの最良値はN_best_values[{{j},{values:size(2)-k+1}]]であり、scores行列の対応するインデックスはthi S row, column値:

row=j 
column=N_best_indexes[{{j},indexes:size(2)-k+1}}]. 

は、例えば、2番目の質問の最初の最良値(k=1)が2nd行とscores6th列に位置99、です。 values[{{2},values:size(2)}}]99であり、indexes[{{2},{indexes:size(2)}}]がであることがわかります。これはscoresマトリックスの列インデックスです。

私の解決策をうまく説明してくれることを願っています。

関連する問題