torch / lua:从Tensor

时间:2017-07-30 09:44:38

标签: lua torch

我现在有以下代码,它会在pred中存储每个问题的最高分数的索引,并将其转换为字符串。

我想为每个问题的n-best指数做同样的事情,而不仅仅是具有最高得分的单个索引,并将它们转换为字符串。我还想显示每个索引(或每个转换后的字符串)的分数。

因此scores必须进行排序,pred必须是多行/列而不是1 x nq。 <{1}}中每个条目的相应score值必须是可检索的。

我对lua / torch语法一无所知,任何帮助都会非常感激。

pred

1 个答案:

答案 0 :(得分: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]

如您所见,i-th的{​​{1}}行是values i-th行的排序版本(按递增顺序排列),scores行中indexes行1}}为您提供相应的索引。

您可以使用

获取每个问题(行)的N最佳值/索引
> 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=3

> 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]

因此,问题k-th的{​​{1}}最佳值为jN_best_values[{{j},{values:size(2)-k+1}]]矩阵中的相应索引由此scores值给出:

row, column

例如,第二个问题的第一个最佳值(row=j column=N_best_indexes[{{j},indexes:size(2)-k+1}}]. )是k=1,它位于99的{​​{1}}行和2nd列中}。您可以看到6thscores,而values[{{2},values:size(2)}}]为您提供99,这是indexes[{{2},{indexes:size(2)}}]矩阵中的列索引。

希望我能很好地解释我的解决方案。