2

我有使用 Matlab 的神经网络工具箱设置和训练神经网络(“nn”)的 Matlab .m 脚本。该脚本会启动一些显示训练进度等的 GUI。nn 的训练通常需要很长时间。

我正在使用 64 个处理器内核的计算机上进行这些实验。我想同时训练多个网络,而不必运行多个 Matlab 会话。所以我想:

  1. 开始训练神经网络
  2. 修改创建网络的脚本以创建不同的网络
  3. 开始训练修改后的网络
  4. 修改脚本以创建另一个网络...
  5. 多次重复步骤 1-4

问题是,当我运行脚本时,它会阻塞 Matlab 终端,所以在脚本执行最后一个命令之前我不能做任何其他事情——这需要很长时间。如何并行运行所有这些计算?我确实有 Matlab 并行工具箱。


编辑:Matlab 错误??

更新:这个问题似乎只发生在 R2012a 上,看起来在 R2012b 上已修复。

当我尝试Edric 的回答中推荐的命令序列时,出现了非常奇怪的错误。这是我的代码:

 >> job = batch(c, @nn, 1, {A(:, 1:end -1), A(:, end)});
 >> wait(job);
 >> r = fetchOutputs(job)
 Error using parallel.Job/fetchOutputs (line 677)
 An error occurred during execution of Task with ID 1.

 Caused by:
    Error using nntraintool (line 35)
    Java is not available.

以下是nntraintool错误起源的(Matlab 的神经网络工具包的一部分)的第 27-37 行:

if ~usejava('swing')
  if (nargin == 1) && strcmp(command,'check')
    result = false;
    result2 = false;
    return
  else

    disp('java used');
    error(message('nnet:Java:NotAvailable'));
  end
end 

所以看起来问题是使用batch命令执行作业时无法使用 GUI(因为 Swing 不可用)。奇怪的是,该nn功能不会以当前形式启动任何 GUI。该错误是由默认启动 GUI的火车nn引起的,但我已将其关闭:

net.trainParam.showWindow = false;
net = train(net, X, y);

更有趣的nn是,如果正常启动相同的函数(>> nn(A(:, 1:end -1), A(:, end));),它永远不会进入第 27 行的外部if-then语句nntraintool(我已经使用调试器检查过)。因此,使用相同的函数,相同的参数表达式在命令正常启动时~usejava('swing')计算为 1,但在使用启动时计算为 1 。0batch

你怎么看待这件事?它看起来像丑陋的 Matlab 或神经网络工具箱错误:(((

4

1 回答 1

6

使用 Parallel Computing Toolbox,您最多可以运行 12 个“本地工作人员”来执行您的脚本(要运行更多,您需要购买额外的MATLAB 分布式计算服务器许可证)。鉴于您的工作流程,最好的办法可能是使用BATCH命令提交一系列非交互式作业。请注意,您将无法从工作人员那里看到任何 GUI。你可能会做这样的事情(使用 R2012a+ 语法):

c = parcluster('local'); % get the 'local' cluster object
job = batch(c, 'myNNscript'); % submit script for execution
% now edit 'myNNscript'
job2 = batch(c, 'myNNscript'); % submit script for execution
...
wait(job); load(job) % get the results

请注意,BATCH 命令会自动将要运行的脚本的副本附加到作业中,以便您在提交后可以自由地对其进行更改。

于 2012-10-18T07:10:22.383 回答