赞
踩
Matlab实现BO-CNN贝叶斯优化卷积神经网络多输入单输出回归预测
1.data为数据集,输入7个特征,输出1个变量。
2.MainBO_CNN.m为程序主文件,其他为函数文件无需运行。
3.命令窗口输出MAE、MSE、RMSEP、R^2、RPD和MAPE,可在下载区获取数据和程序内容。
4.贝叶斯优化算法优化参数为学习率、批处理样本大小和、正则化参数。
注意程序和数据放在一个文件夹,运行环境为Matlab2018及以上。
对于超参数的优化,可以将这种优化看做是反映泛化性能的未知黑盒函数的优化,并调用针对这些问题开发的算法。这些优化问题作为训练过程的一部分,经常遇到低层次目标是不同的: 这里函数评估( 求值目标函数调用一次) 代价很大,因为它们涉及到主要的机器学习算法的完成。在这种函数求值代价大的情况下,希望花费计算时间来更好地选择在哪里寻找最佳参数。在贝叶斯优化中,感兴趣的是在一些有界集合Λ 上找到函数f( λ) 的最小值,本文将它作为R 的一个子集。使得贝叶斯优化不同于其他程序的是它为f( λ) 构造一个概率模型,然后利用这个模型来决定Λ 在哪里去评估函数,同时整合不确定性。基本的思路是使用f( λ) 以前评估中可用的所有信息来学习目标函数的形态,而不是简单地依靠局部梯度和Hessian 近似。这可以实现通过较少的评估就可以找到复杂非凸函数的最小值,代价是执行更多的计算以确定下一个采样点。因此分为了两个步骤: a) 选择一个先验函数来表达关于被优化函数的假设,本文使用的高斯过程具有灵活易处理的特性; b) 选择一个采集函数,用来从后验模型构造一个效用函数,确定下一个采样点。将要优化的CNN 的超参数看做是多维空间的点。
%% 构造网络结构 %% 参数设置 % % 参数设置 options = trainingOptions('sgdm', ... % 梯度下降算法adam 'MaxEpochs',500, ... % 最大训练次数 1000 'MiniBatchSize',MiniBatchSize, ... 'GradientThreshold', 1, ... 'InitialLearnRate', InitialLearnRate, ... 'LearnRateSchedule', 'piecewise', ... 'LearnRateDropPeriod',400, ... % 经过800次训练后 学习率为 0.01*0.1 'LearnRateDropFactor',0.2, ... 'L2Regularization', L2Regularization, ... 'ExecutionEnvironment', 'cpu',... 'Verbose', 0, ... 'Plots', 'training-progress'); %% 训练模型 net = trainNetwork(vp_train,vt_train,layers,options); layers = [ % Image Input Layer An imageInputLayer imageInputLayer([64 64 1]) % Convolutional Layer convolution2dLayer(3,8,'Padding','same') % Batch Normalization batchNormalizationLayer % ReLU Layer The batch reluLayer % Max Pooling Layer % More values means less weights maxPooling2dLayer(4,'Stride',4) %------------------------------ convolution2dLayer(3,8,'Padding','same') batchNormalizationLayer reluLayer maxPooling2dLayer(5,'Stride',5) convolution2dLayer(3,8,'Padding','same') batchNormalizationLayer reluLayer % Fully Connected Layer (Number of Classes) fullyConnectedLayer(8) options = trainingOptions('sgdm', ... 'InitialLearnRate',0.001, ... 'MaxEpochs',20, ... 'Shuffle','every-epoch', ... 'ValidationData',imdsValidation, ... 'ValidationFrequency',8, ... 'Verbose',false, ... 'Plots','training-progress'); % Train the network [net,info]= trainNetwork(imdsTrain,layers,options); %% Bees Algorithm Weight Fitting % Converting Serial Network to an Object netobj = net.saveobj; % Extracting Fully Connected Layer's Weights To Evolve FullConn=netobj.Layers(13, 1).Weights; netbias=netobj.Layers(13, 1).Bias; %% Data for Each Weight sizefinal=size(FullConn); sizefinal=sizefinal(1,1); for i=1:sizefinal Inputs=FullConn(i,:); Targets=Inputs; data.Inputs=Inputs; data.Targets=Targets; datam{i}=JustLoad(data); end; %% Making Basic Fuzzy Model for Each Class Weight % Fuzzy C Means (FCM) Cluster Number ClusNum=3; % Creating Initial Fuzzy Model to Employ for Each Class Weight for i=1:sizefinal fism{i}=GenerateFuzzy(datam{i},ClusNum); end %% Tarining Bees Algorithm % Fitting Fully Connected Layer's Weights with Bees Algorithm for i=1:sizefinal disp(['Bees Are Working on Weights of Class # (' num2str(i) ')']); BeesFISm{i}=BEEFCN(fism{i},datam{i}); end;
[1] https://blog.csdn.net/article/details/126072792?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/article/details/126044265?spm=1001.2014.3001.5502
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。