加权贝叶斯matlab代码,使用贝叶斯优化进行深度学习

加权贝叶斯matlab代码,使⽤贝叶斯优化进⾏深度学习
准备数据
下载 CIFAR-10 数据集 [1]。该数据集包含 60,000 个图像,每个图像的⼤⼩为 32×32,并具有三个颜⾊通道 (RGB)。整个数据集的⼤⼩为 175 MB。下载过程可能需要⼀些时间,具体取决于您的 Internet 连接情况。
datadir = tempdir;
downloadCIFARData(datadir);
加载 CIFAR-10 数据集,⽤作训练图像和标签以及测试图像和标签。要启⽤⽹络验证,请将 5000 个测试图像⽤于验证。
[XTrain,YTrain,XTest,YTest] = loadCIFARData(datadir);
idx = randperm(numel(YTest),5000);
XValidation = XTest(:,:,:,idx);
XTest(:,:,:,idx) = [];
YValidation = YTest(idx);
YTest(idx) = [];
您可以使⽤以下代码显⽰训练图像的样本。
figure;
idx = randperm(numel(YTrain),20);
for i = 1:numel(idx)
subplot(4,5,i);
imshow(XTrain(:,:,:,idx(i)));
end
选择要优化的变量吡咯烷酮羧酸锌
选择要使⽤贝叶斯优化对哪些变量进⾏优化,并指定搜索范围。此外,指定变量是否为整数以及是否搜索对数空间中的区间。优化以下变量:
⽹络部分深度。此参数控制⽹络的深度。⽹络有三个部分,每个部分都有 SectionDepth 个相同的卷积层。因此卷积层的总数为
3*SectionDepth。脚本稍后部分中的⽬标函数在每个层中采⽤与 1/sqrt(SectionDepth) 成⽐例的卷积滤波器数量。因此,对于不同的部分深度,每次迭代的参数数量和所需的计算量⼤致相同。
初始化学习率。最佳学习率取决于您的数据以及您正在训练的⽹络。
随机梯度下降动量。动量在当前参数更新中包含⼀个与前⼀次迭代中的更新成⽐例的贡献,从⽽在更新中增加惯性。这会使参数更新更加平滑,并减少随机梯度下降固有的噪声。
L2 正则化强度。使⽤正则化以防⽌过拟合。搜索正则化强度的空间以查良好的值。数据增强和批量归⼀化也有助于正则化⽹络。
optimVars = [
optimizableVariable('SectionDepth',[1 3],'Type','integer')
optimizableVariable('InitialLearnRate',[1e-2 1],'Transform','log')
optimizableVariable('Momentum',[0.8 0.98])
optimizableVariable('L2Regularization',[1e-10 1e-2],'Transform','log')];
执⾏贝叶斯优化
使⽤训练数据和验证数据作为输⼊,为贝叶斯优化器创建⽬标函数。⽬标函数训练⼀个卷积神经⽹络并返回对验证集的分类误差。该函数在
此脚本的末尾定义。由于 bayesopt 使⽤基于验证集的误差率来选择最佳模型,因此最终⽹络可能会对验证集过拟合。随后基于独⽴测试集测试最终选择的模型,以估计泛化误差。
ObjFcn = makeObjFcn(XTrain,YTrain,XValidation,YValidation);
通过最⼤程度地减⼩对验证集的分类误差来执⾏贝叶斯优化。以秒为单位指定总优化时间。为了最好地利⽤贝叶斯优化的能⼒,您应该执⾏
⾄少 30 次对象函数评估。要在多个 GPU 上并⾏训练⽹络,请将 'UseParallel' 值设置为 true。如果您有⼀个 GPU 并将 'UseParallel' 值
设置为 true,则所有⼯作进程将共⽤该 GPU,这不仅⽆法加速训练,⽽且会增加 GPU 耗尽内存的⼏率。
每个⽹络完成训练后,bayesopt 将结果显⽰到命令⾏窗⼝。然后,bayesopt 函数返回 BayesObject.UserDataTrace 中的⽂件名。⽬标
函数将经过训练的⽹络保存到磁盘,并将⽂件名返回到 bayesopt。
BayesObject = bayesopt(ObjFcn,optimVars, ...
'MaxTime',14*60*60, ...
'IsObjectiveDeterministic',false, ...
'UseParallel',false);
|==========================================================================================
| Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | SectionDepth | InitialLearn-| Momentum
| L2Regulariza-|
| | result | | runtime | (observed) | (estim.) | | Rate | | tion |
|==========================================================================================
| 1 | Best | 0.197 | 955.69 | 0.197 | 0.197 | 3 | 0.61856 | 0.80624 | 0.00035179 |
| 2 | Best | 0.1918 | 790.38 | 0.1918 | 0.19293 | 2 | 0.074118 | 0.91031 | 2.7229e-09 |
| 3 | Accept | 0.2438 | 660.29 | 0.1918 | 0.19344 | 1 | 0.051153 | 0.90911 | 0.00043113 |
| 4 | Accept | 0.208 | 672.81 | 0.1918 | 0.1918 | 1 | 0.70138 | 0.81923 | 3.7783e-08 |
| 5 | Best | 0.1792 | 844.07 | 0.1792 | 0.17921 | 2 | 0.65156 | 0.93783 | 3.3663e-10 |
| 6 | Best | 0.1776 | 851.49 | 0.1776 | 0.17759 | 2 | 0.23619 | 0.91932 | 1.0007e-10 |
| 7 | Accept | 0.2232 | 883.5 | 0.1776 | 0.17759 | 2 | 0.011147 | 0.91526 | 0.0099842 |
| 8 | Accept | 0.2508 | 822.65 | 0.1776 | 0.17762 | 1 | 0.023919 | 0.91048 | 1.0002e-10 |
| 9 | Accept | 0.1974 | 1947.6 | 0.1776 | 0.17761 | 3 | 0.010017 | 0.97683 | 5.4603e-10 |
| 10 | Best | 0.176 | 1938.4 | 0.176 | 0.17608 | 2 | 0.3526 | 0.82381 | 1.4244e-07 |
| 11 | Accept | 0.1914 | 2874.4 | 0.176 | 0.17608 | 3 | 0.079847 | 0.86801 | 9.7335e-07 |
竞赛抢答器| 12 | Accept | 0.181 | 2578 | 0.176 | 0.17809 | 2 | 0.35141 | 0.80202 | 4.5634e-08 |
| 13 | Accept | 0.1838 | 2410.8 | 0.176 | 0.17946 | 2 | 0.39508 | 0.95968 | 9.3856e-06 |
| 14 | Accept | 0.1786 | 2490.6 | 0.176 | 0.17737 | 2 | 0.44857 | 0.91827 | 1.0939e-10 |
| 15 | Accept | 0.1776 | 2668 | 0.176 | 0.17751 | 2 | 0.95793 | 0.85503 | 1.0222e-05 |
| 16 | Accept | 0.1824 | 3059.8 | 0.176 | 0.17812 | 2 | 0.41142 | 0.86931 | 1.447e-06 |
| 17 | Accept | 0.1894 | 3091.5 | 0.176 | 0.17982 | 2 | 0.97051 | 0.80284 | 1.5836e-10 |
| 18 | Accept | 0.217 | 2794.5 | 0.176 | 0.17989 | 1 | 0.2464 | 0.84428 | 4.4938e-06 |
| 19 | Accept | 0.2358 | 4054.2 | 0.176 | 0.17601 | 3 | 0.22843 | 0.9454 | 0.00098248 |
| 20 | Accept | 0.2216 | 4411.7 | 0.176 | 0.17601 | 3 | 0.010847 | 0.82288 | 2.4756e-08 |
|==========================================================================================
| Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | SectionDepth | InitialLearn-| Momentum | L2Regulariza-|
| | result | | runtime | (observed) | (estim.) | | Rate | | tion |
|==========================================================================================
| 21 | Accept | 0.2038 | 3906.4 | 0.176 | 0.17601 | 2 | 0.09885 | 0.81541 | 0.0021184 |
电极铜| 22 | Accept | 0.2492 | 4103.4 | 0.176 | 0.17601 | 2 | 0.52313 | 0.83139 | 0.0016269 |
| 23 | Accept | 0.1814 | 4240.5 | 0.176 | 0.17601 | 2 | 0.29506 | 0.84061 | 6.0203e-10 |
监控预警
__________________________________________________________
Optimization completed.
MaxTime of 50400 seconds reached.
Total function evaluations: 23
Total elapsed time: 53088.5123 seconds
Total objective function evaluation time: 53050.7026
Best observed feasible point:
SectionDepth InitialLearnRate Momentum L2Regularization
____________ ________________ ________ ________________
2 0.3526 0.82381 1.4244e-07
Observed objective function value = 0.176
Estimated objective function value = 0.17601
Function evaluation time = 1938.4483
Best estimated feasible point (according to models):
SectionDepth InitialLearnRate Momentum L2Regularization
____________ ________________ ________ ________________
2 0.3526 0.82381 1.4244e-07
Estimated objective function value = 0.17601
Estimated function evaluation time = 1898.2641
评估最终⽹络
加载在优化中到的最佳⽹络及其验证准确度。
bestIdx = BayesObject.IndexOfMinimumTrace(end);
fileName = BayesObject.UserDataTrace{bestIdx};
savedStruct = load(fileName);
valError = savedStruct.valError
valError = 0.1760
预测测试集的标签并计算测试误差。将测试集中每个图像的分类视为具有⼀定成功概率的独⽴事件,这意味着分类错误的图像数量遵循⼆项分布。使⽤这种⽅法来计算标准误差 (testErrorSE) 和泛化误差率的约 95% 置信区间 (testError95CI)。此⽅法通常称为 Wald ⽅法。bayesopt 使⽤验证集确定最佳⽹络,⽽不对⽹络使⽤测试集。因此,测试误差可能⾼于验证误差。
[YPredicted,probs] = ainedNet,XTest);
testError = 1 - mean(YPredicted == YTest)
testError = 0.1910
NTest = numel(YTest);
testErrorSE = sqrt(testError*(1-testError)/NTest);
testError95CI = [testError - 1.96*testErrorSE, testError + 1.96*testErrorSE]
testError95CI = 1×2
0.1801 0.2019
绘制测试数据的混淆矩阵。使⽤列汇总和⾏汇总显⽰每个类的准确率和召回率。
figure('Units','normalized','Position',[0.2 0.2 0.4 0.4]);
cm = confusionchart(YTest,YPredicted);
cm.Title = 'Confusion Matrix for Test Data';
cm.ColumnSummary = 'column-normalized';
cm.RowSummary = 'row-normalized';
您可以使⽤以下代码显⽰⼀些测试图像以及它们的预测类和这些类的概率。
figure
idx = randperm(numel(YTest),9);
for i = 1:numel(idx)
subplot(3,3,i)
imshow(XTest(:,:,:,idx(i)));
prob = num2str(100*max(probs(idx(i),:)),3);
predClass = char(YPredicted(idx(i)));信号调理模块
label = [predClass,', ',prob,'%'];
title(label)
end
优化的⽬标函数
定义优化的⽬标函数。此函数执⾏以下步骤:
将优化变量的值作为输⼊。bayesopt 使⽤某个表中的优化变量的当前值调⽤⽬标函数,该表的每个列名等于变量名称。例如,⽹络部分深度的当前值为 optVars.SectionDepth。
定义⽹络架构和训练选项。
训练并验证⽹络。
将经过训练的⽹络、验证误差和训练选项保存到磁盘。
返回已保存⽹络的验证误差和⽂件名。
机器人拉车function ObjFcn = makeObjFcn(XTrain,YTrain,XValidation,YValidation)
ObjFcn = @valErrorFun;
function [valError,cons,fileName] = valErrorFun(optVars)
定义卷积神经⽹络架构。
对卷积层进⾏填充,使空间输出⼤⼩始终与输⼊⼤⼩相同。

本文发布于:2024-09-21 20:33:16,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/215899.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:优化   验证   图像   训练   测试
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议