Torch + nn: 一些电脑上出现“非法指令”错误

我希望能利用 Torch 和深度神经网络进行本科研究。但是,我在我的导师的服务器上安装 Torch 的过程中出现了问题。

我所看到的行为是,当我在我的导师的服务器上运行本文末尾的代码时,程序在 criterion:forward(mlp:forward(input), output) 这一行运行到一半就出现了 非法指令 的错误。然而,在我的本地安装中,程序运行到完成并打印结果。

因此,我认为我的导师机器上的安装存在问题。我的问题是: 1)有人能确认这是否是一个已知/常见的问题吗? 2)我需要如何解决这个问题?

-- 训练 NN 以识别以下函数:
-- f(x_1, x_2) = (x_1 * x_2 > 0).

-- 我们将使用神经网络
require 'nn'

-- 设置神经网络
--[[       2             20          20             1
  input[1] -- /--------\ -- /------\ -- /--------\
              | linear | -- | tanh | -- | linear | -- output
  input[2] -- \--------/ -- \------/ -- \--------/
]]--

mlp = nn.Sequential();
inputs = 2; outputs = 1; HUs = 20;
mlp:add(nn.Linear(inputs, HUs));
mlp:add(nn.Tanh());
mlp:add(nn.Linear(HUs, outputs))

-- 我们希望使用 MSE
误差 = nn.MSECriterion()

-- 提供 2500 个训练数据点
print("迭代...")
for i = 1,2500 do
  local input = torch.randn(2);
  local output = torch.Tensor(1);
  if (input[1] * input[2] > 0) then
    output[1] = -1
  else
    output[1] = 1
  end

  criterion:forward(mlp:forward(input), output)

  mlp:zeroGradParameters()
  mlp:backward(input, criterion:backward(mlp.output, output))
  mlp:updateParameters(0.01)
end
print("模型已训练...")

-- 测试模型
x = torch.Tensor(2)
x[1] =  0.5; x[2] =  0.5; print(mlp:forward(x));
x[1] =  0.5; x[2] = -0.5; print(mlp:forward(x));
x[1] = -0.5; x[2] =  0.5; print(mlp:forward(x));
x[1] = -0.5; x[2] = -0.5; print(mlp:forward(x));

(如果需要下载文件,请访问 GitHub 链接)

点赞