ニューラルネットワークのハイパーパラメータを最適化する方法はありますか?
10 ビュー (過去 30 日間)
古いコメントを表示
MathWorks Support Team
2017 年 10 月 27 日
編集済み: MathWorks Support Team
2021 年 6 月 25 日
ニューラルネットワークにはユーザ側で事前に決め打ちで設定しなければいけないハイパーパラメータ (例えば、学習率や隠れ層の数、伝達関数等) があります。
これらのハイパーパラメータを最適化する手段があるか、教えてください。
採用された回答
MathWorks Support Team
2021 年 6 月 25 日
編集済み: MathWorks Support Team
2021 年 6 月 25 日
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 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で イメージを使用した深層学習 についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!