2

Matlab のニューラル ネットワーク ツールボックスを使用して、ニューラル ネットワーク ("nn") を設定およびトレーニングする Matlab .m スクリプトがあります。スクリプトはトレーニングの進行状況などを示す GUI を起動します。通常、nn のトレーニングには長い時間がかかります。

これらの実験は、64 個のプロセッサ コアを搭載したコンピューターで行っています。複数の Matlab セッションを実行することなく、同時に複数のネットワークをトレーニングしたいと考えています。だから私はしたい:

  1. ニューラル ネットワークのトレーニングを開始する
  2. ネットワークを作成するスクリプトを変更して、別のネットワークを作成します
  3. 変更されたネットワークのトレーニングを開始する
  4. スクリプトを変更して、さらに別のネットワークを作成します...
  5. 手順 1 ~ 4 を数回繰り返します

問題は、スクリプトを実行するとMatlabターミナルがブロックされるため、スクリプトが最後のコマンドを実行するまで何もできず、時間がかかることです。これらすべての計算を並行して実行するにはどうすればよいですか? 私はMatlabの並列ツールボックスを持っています。


編集:Matlab のバグ??

更新:この問題は R2012a でのみ発生するようで、R2012b では修正されているようです。

Edric's answerで推奨されているコマンド シーケンスを実行すると、非常に奇妙なエラーが発生します。これが私のコードです:

 >> 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コマンドを使ってジョブを実行すると、Swing が利用できないため、GUI を使用できないことが問題のようです。奇妙なことは、nn関数が現在の形式で GUI を起動しないことです。エラーは、デフォルトで GUI を起動するトレインnnが原因ですが、私はそれをオフにしました。

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

さらに興味深いことに、同じnn関数が正常に起動された場合 ( )、27 行目の外側のif-thenステートメントに>> nn(A(:, 1:end -1), A(:, end));入ることはありません(デバッガーを使用して確認しました)。したがって、同じ関数を使用すると、同じ引数式は、コマンドが正常に起動された場合は に評価されますが、 を使用して起動された場合は 1 に評価されます。nntraintool~usejava('swing')0batch

これについてあなたはどう思いますか?醜いMatlabまたはニューラルネットワークツールボックスのバグのように見えます:(((

4

1 に答える 1

6

Parallel Computing Toolbox を使用すると、最大 12 個の「ローカル ワーカー」を実行してスクリプトを実行できます (それ以上を実行するには、追加のMATLAB Distributed Computing Serverライセンスを購入する必要があります)。ワークフローを考えると、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 に答える