ニューラルネットワークのハイパーパラメータを最適化する方法はありますか?
6 views (last 30 days)
Show older comments
MathWorks Support Team
on 27 Oct 2017
Edited: MathWorks Support Team
on 25 Jun 2021
ニューラルネットワークにはユーザ側で事前に決め打ちで設定しなければいけないハイパーパラメータ (例えば、学習率や隠れ層の数、伝達関数等) があります。
これらのハイパーパラメータを最適化する手段があるか、教えてください。
Accepted Answer
MathWorks Support Team
on 25 Jun 2021
Edited: MathWorks Support Team
on 25 Jun 2021
Neural Network Toolbox (R2017b) より 製品提供デモとして、ベイズ最適化を使って CNN のハイパーパラメータを最適化する例題が提供されています。
また、従来の 誤差逆伝搬法によるニューラルネットワークの例としては、下記のようにパラメータを求めることができます。
% ベイズ最適化を用いた BackPropagation のハイパーパラメータの最適化例
% 隠れ層 1層目のユニット数 (5 ~ 15)
% 隠れ層 2層目のユニット数 (5 ~ 15)
% 隠れ層 1層目の伝達関数 (tansig, logsig, purelin)
% 隠れ層 2層目の伝達関数 (tansig, logsig, purelin)
% について、ベイズ最適化
optimVars = [
optimizableVariable('numHidden1',[5 15],'Type','integer','Optimize',true)
optimizableVariable('numHidden2',[5 15],'Type','integer','Optimize',true)
optimizableVariable('tfHidden1',{'tansig','logsig','purelin'},'Type','categorical','Optimize',true)
optimizableVariable('tfHidden2',{'tansig','logsig','purelin'},'Type','categorical','Optimize',true)];
% 目的関数設定 (nn の評価関数を最小化するように設定)
% 最大繰り返し回数 200, 最大計算時間 2時間
ObjFcn = makeObjFcn;
BayesObject = bayesopt(ObjFcn,optimVars,...
'MaxObj',200,...
'MaxTime',2*60*60,...
'IsObjectiveDeterministic',false,...
'UseParallel',true);
% ベイズ最適化の為の目的関数
function ObjFcn = makeObjFcn()
ObjFcn = @valErrorFun;
function valError = valErrorFun(optVars)
rng(15);
% 入出力データロード
[x,t] = bodyfat_dataset;
% 4層ニューラルネットワーク初期化
net = feedforwardnet([optVars.numHidden1, optVars.numHidden2]);
net.trainParam.showWindow = false;
net.layers{1}.transferFcn = char(optVars.tfHidden1);
net.layers{2}.transferFcn = char(optVars.tfHidden2);
% 学習
net = train(net,x,t);
% テスト
y = net(x);
% 誤差の評価
valError = perform(net,y,t);
end
end
0 Comments
More Answers (0)
See Also
Categories
Find more on Deep Learning Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!