i具有MATLAB .M脚本,该脚本使用MATLAB的Neural Network Toolbox设置和训练神经网络(" NN")。该脚本推出了一些GUI,显示了Trainig进度等。NN的培训通常需要很长时间。
我正在用64个处理器内核在计算机上进行这些实验。我想同时培训多个网络,而不必进行多个MATLAB会议。所以我想:
- 开始培训神经网络
- 修改脚本创建网络以创建不同的网络
- 开始修改网络的培训
- 修改脚本以创建另一个网络...
- 重复步骤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
的第27-37行(MATLAB神经网络工具包),其中错误起源于:
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(因为不可用)无法使用。奇怪的是,nn
函数不会以当前形式启动任何GUI。错误是由默认启动GUI的火车引起的,但在nn
中,我已关闭了该Gie:
net.trainParam.showWindow = false;
net = train(net, X, y);
更有趣的是,如果正常启动相同的nn
函数(>> nn(A(:, 1:end -1), A(:, end));
),它永远不会进入第27行上nntraintool
的语句的外部(我已经使用DEBUGGER检查了该语句)。因此,使用相同的函数,同一参数表达式 ~usejava('swing')
在正常启动时评估 0
,但使用 batch
启动时为1。
您对此有何看法?看起来像丑陋的matlab或神经网络工具箱bug :(((((
使用并行计算工具箱,您可以运行多达12个'本地工人'来执行脚本(要运行更多的是,您需要购买其他MATLAB分布式计算服务器许可证)。鉴于您的工作流程,最好的事情可能是使用批处理命令提交一系列非交互式作业。请注意,您将无法从工人那里看到任何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
请注意,批处理命令会自动将脚本的副本附加到作业上,以便您在提交后可以自由更改它。