【发布时间】:2015-10-11 15:49:59
【问题描述】:
我在 Lua/Torch 中遇到了 torch.mm 函数的奇怪行为。这是一个演示问题的简单程序。
iteration = 0;
a = torch.Tensor(2, 2);
b = torch.Tensor(2, 2);
prod = torch.Tensor(2,2);
a:zero();
b:zero();
repeat
prod = torch.mm(a,b);
ent = prod[{2,1}];
iteration = iteration + 1;
until ent ~= ent
print ("error at iteration " .. iteration);
print (prod);
程序由一个循环组成,其中程序将两个零 2x2 矩阵相乘并测试乘积矩阵的条目 ent 是否等于 nan。似乎程序应该永远运行,因为 product 应该总是等于 0,因此 ent 应该是 0。但是,程序打印:
error at iteration 548
0.000000 0.000000
nan nan
[torch.DoubleTensor of size 2x2]
为什么会这样?
更新:
- 如果我将 prod = torch.mm(a,b) 替换为 torch.mm(prod,a,b),问题就消失了,这表明存在问题内存分配错误。
- 我的 Torch 版本是在没有 BLAS 和 LAPACK 库的情况下编译的。在我用 OpenBLAS 重新编译了 torch 之后,问题就消失了。不过,我仍然对其原因感兴趣。
【问题讨论】:
-
了解更多有关您的环境的信息会很有用,例如硬件、操作系统、torch/distro 的 SHA 和解释器(LuaJIT 2.0?2.1?还是 Lua 5.1?5.2?)。
-
这是我的环境信息:Linux CentOS、LuaJIT 2.0.3、Torch 7。Torch 是在没有 LAPACK 和 BLAS 库的情况下编译的。在我用 OpenBLAS 重新编译后,问题就消失了。但我仍然对它的原因感兴趣。