当前位置:   article > 正文

回归预测 | MATLAB实现BO-CNN贝叶斯算法优化卷积神经网络多输入单输出_多输入单输出神经网络

多输入单输出神经网络

回归预测 | MATLAB实现BO-CNN贝叶斯算法优化卷积神经网络多输入单输出

预测效果

1

2
3
4
5
6
7
8
9

基本介绍

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 的超参数看做是多维空间的点。

10

程序设计

%%  构造网络结构
%%  参数设置
% % 参数设置
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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85

参考资料

[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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/347955
推荐阅读
相关标签
  

闽ICP备14008679号