ニュ,ラルネットワ,クの学習の速度とメモリの最適化
メモリ削減
特定のニュ,ラルネットワ,クによっては,シミュレ,ションと勾配の計算がmatlab®またはmexで実行される場合があります。墨西哥人の方がメモリ効率は高いですが,MATLABは時間と引き換えにメモリ効率を高めることができます。
Matlabまたはmexのどらを使用しているかを確認するには,“showResources”
オプションを使用します。以下に,構文の一般的な形式を示します。
net2 = train(net1,x,t,'showResources','yes')
Matlabが使用されており,メモリ制限が問題である場合は,デ,タのN
個のサブセットそれぞれに対して計算が順にN
回実行される代わりに,N
の係数で必要な一時ストレ,ジの量を減らすことができます。
net2 = train(net1,x,t,'约简',N);
これは,メモリ削減と呼ばれます。
高速なElliotシグモド
シンプルな計算ハ,ドウェアには,指数関数を直接サポ,トしていないものがあります。このような場合,ソフトウェアの実装が遅くなる可能性があります。埃利奥特シグモ@ @ド関数elliotsig
は,対称シグモtansig
と同じ役割を果たしますが,指数関数を回避します。
以下はElliotシグモドのプロットです。
N = -10:0.01:10;A = elliotsig(n);情节(n)
次に,elliotsig
をtansig
と比較します。
A2 = tansig(n);H = plot(n,a,n,a2);传奇(h,“elliotsig”,“tansig”,“位置”,“西北”)
tansig
の代わりにelliotsig
を使用してニューラルネットワークに学習させるには,ネットワークの伝達関数を以下のように変換します。
[x,t] = bodyfat_dataset;网络=前馈网络;视图(净)net.layers{1}。transferFcn = 'elliotsig';View (net) net = train(net,x,t);Y =净(x)
ここで,elliotsig
とtansig
の実行回数を比較します。テストシステムでは,elliotsig
が約4倍高速になっています。
N =兰特(5000,5000);抽搐,因为我= 1:10 0,a = tansig (n);end, tansigTime = toc;抽搐,因为我= 1:10 0,a = elliotsig (n);结束,elliotTime = toc;加速= tansigTime / elliotTime加速= 4.1406
ただし,elliotsig
ではシミュレーションが高速になるものの,2つの伝達関数の形状が異なるため,学習も高速であるという保証はありません。ここでは,10個のネットワ,クの学習をそれぞれtansig
とelliotsig
に対して行っていますが,同じネットワークで同じ問題を実行した場合であっても学習時間が大きく変化しています。
[x,t] = bodyfat_dataset;tansigNet =前馈网;tansigNet.trainParam.showWindow = false;elliotNet = tansigNet;elliotNet.layers{1}。transferFcn = 'elliotsig';for i=1:10, tic, net = train(tsignnet,x,t);tansigTime = toc, end for i=1:10, tic, net = train(elliotNet,x,t), elliotTime = toc, end