matlab深度学习_matlab使用贝叶斯优化的深度学习
原文鏈接:
http://tecdat.cn/?p=7954?tecdat.cn此示例說明如何將貝葉斯優(yōu)化應(yīng)用于深度學(xué)習(xí),以及如何為卷積神經(jīng)網(wǎng)絡(luò)找到最佳網(wǎng)絡(luò)超參數(shù)和訓(xùn)練選項。
要訓(xùn)??練深度神經(jīng)網(wǎng)絡(luò),必須指定神經(jīng)網(wǎng)絡(luò)架構(gòu)以及訓(xùn)練算法的選項。選擇和調(diào)整這些超參數(shù)可能很困難并且需要時間。貝葉斯優(yōu)化是一種非常適合用于優(yōu)化分類和回歸模型的超參數(shù)的算法。
準備數(shù)據(jù)
下載CIFAR-10數(shù)據(jù)集[1]。該數(shù)據(jù)集包含60,000張圖像,每個圖像的大小為32 x 32和三個顏色通道(RGB)。整個數(shù)據(jù)集的大小為175 MB。
加載CIFAR-10數(shù)據(jù)集作為訓(xùn)練圖像和標簽,并測試圖像和標簽。
[XTrain,YTrain,XTest,YTest] = loadCIFARData(datadir); idx = randperm(numel(YTest),5000); XValidation = XTest(:,:,:,idx); XTest(:,:,:,idx) = []; YValidation = YTest(idx); YTest(idx) = [];
您可以使用以下代碼顯示訓(xùn)練圖像的樣本。
figure; idx = randperm(numel(YTrain),20); for i = 1:numel(idx) subplot(4,5,i); imshow(XTrain(:,:,:,idx(i))); end
選擇要優(yōu)化的變量
選擇要使用貝葉斯優(yōu)化進行優(yōu)化的變量,并指定要搜索的范圍。此外,指定變量是否為整數(shù)以及是否在對數(shù)空間中搜索區(qū)間。優(yōu)化以下變量:
- 網(wǎng)絡(luò)部分的深度。此參數(shù)控制網(wǎng)絡(luò)的深度。該網(wǎng)絡(luò)具有三個部分,每個部分具有SectionDepth相同的卷積層。因此,卷積層的總數(shù)為3*SectionDepth。腳本后面的目標函數(shù)將每一層中的卷積過濾器數(shù)量與成正比1/sqrt(SectionDepth)。結(jié)果,對于不同的截面深度,每次迭代的參數(shù)數(shù)量和所需的計算量大致相同。
- 最佳學(xué)習(xí)率取決于您的數(shù)據(jù)以及您正在訓(xùn)練的網(wǎng)絡(luò)。
- 隨機梯度下降動量。
- 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')];
執(zhí)行貝葉斯優(yōu)化
使用訓(xùn)練和驗證數(shù)據(jù)作為輸入,為貝葉斯優(yōu)化器創(chuàng)建目標函數(shù)。目標函數(shù)訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò),并在驗證集上返回分類誤差。
ObjFcn = makeObjFcn(XTrain,YTrain,XValidation,YValidation);
通過最小化驗證集上的分類誤差來執(zhí)行貝葉斯優(yōu)化。 為了充分利用貝葉斯優(yōu)化的功能,您應(yīng)該至少執(zhí)行30個目標函數(shù)評估。
每個網(wǎng)絡(luò)完成訓(xùn)練后,bayesopt將結(jié)果打印到命令窗口。bayesopt然后該函數(shù)返回中的文件名BayesObject.UserDataTrace。目標函數(shù)將訓(xùn)練有素的網(wǎng)絡(luò)保存到磁盤,并將文件名返回給bayesopt。
|===================================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | SectionDepth | InitialLearn-| Momentum | L2Regulariza-| | | result | | runtime | (observed) | (estim.) | | Rate | | tion | |===================================================================================================================================| | 1 | Best | 0.19 | 2201 | 0.19 | 0.19 | 3 | 0.012114 | 0.8354 | 0.0010624 |
| 2 | Accept | 0.3224 | 1734.1 | 0.19 | 0.19636 | 1 | 0.066481 | 0.88231 | 0.0026626 |
| 3 | Accept | 0.2076 | 1688.7 | 0.19 | 0.19374 | 2 | 0.022346 | 0.91149 | 8.242e-10 |
| 4 | Accept | 0.1908 | 2167.2 | 0.19 | 0.1904 | 3 | 0.97586 | 0.83613 | 4.5143e-08 |
| 5 | Accept | 0.1972 | 2157.4 | 0.19 | 0.19274 | 3 | 0.21193 | 0.97995 | 1.4691e-05 |
| 6 | Accept | 0.2594 | 2152.8 | 0.19 | 0.19 | 3 | 0.98723 | 0.97931 | 2.4847e-10 |
| 7 | Best | 0.1882 | 2257.5 | 0.1882 | 0.18819 | 3 | 0.1722 | 0.8019 | 4.2149e-06 |
| 8 | Accept | 0.8116 | 1989.7 | 0.1882 | 0.18818 | 3 | 0.42085 | 0.95355 | 0.0092026 |
| 9 | Accept | 0.1986 | 1836 | 0.1882 | 0.18821 | 2 | 0.030291 | 0.94711 | 2.5062e-05 |
| 10 | Accept | 0.2146 | 1909.4 | 0.1882 | 0.18816 | 2 | 0.013379 | 0.8785 | 7.6354e-09 |
| 11 | Accept | 0.2194 | 1562 | 0.1882 | 0.18815 | 1 | 0.14682 | 0.86272 | 8.6242e-09 |
| 12 | Accept | 0.2246 | 1591.2 | 0.1882 | 0.18813 | 1 | 0.70438 | 0.82809 | 1.0102e-06 |
| 13 | Accept | 0.2648 | 1621.8 | 0.1882 | 0.18824 | 1 | 0.010109 | 0.89989 | 1.0481e-10 |
| 14 | Accept | 0.2222 | 1562 | 0.1882 | 0.18812 | 1 | 0.11058 | 0.97432 | 2.4101e-07 |
| 15 | Accept | 0.2364 | 1625.7 | 0.1882 | 0.18813 | 1 | 0.079381 | 0.8292 | 2.6722e-05 |
| 16 | Accept | 0.26 | 1706.2 | 0.1882 | 0.18815 | 1 | 0.010041 | 0.96229 | 1.1066e-05 |
| 17 | Accept | 0.1986 | 2188.3 | 0.1882 | 0.18635 | 3 | 0.35949 | 0.97824 | 3.153e-07 |
| 18 | Accept | 0.1938 | 2169.6 | 0.1882 | 0.18817 | 3 | 0.024365 | 0.88464 | 0.00024507 |
| 19 | Accept | 0.3588 | 1713.7 | 0.1882 | 0.18216 | 1 | 0.010177 | 0.89427 | 0.0090342 |
| 20 | Accept | 0.2224 | 1721.4 | 0.1882 | 0.18193 | 1 | 0.09804 | 0.97947 | 1.0727e-10 |
|===================================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | SectionDepth | InitialLearn-| Momentum | L2Regulariza-| | | result | | runtime | (observed) | (estim.) | | Rate | | tion | |===================================================================================================================================| | 21 | Accept | 0.1904 | 2184.7 | 0.1882 | 0.18498 | 3 | 0.017697 | 0.95057 | 0.00022247 |
| 22 | Accept | 0.1928 | 2184.4 | 0.1882 | 0.18527 | 3 | 0.06813 | 0.9027 | 1.3521e-09 |
| 23 | Accept | 0.1934 | 2183.6 | 0.1882 | 0.1882 | 3 | 0.018269 | 0.90432 | 0.0003573 |
| 24 | Accept | 0.303 | 1707.9 | 0.1882 | 0.18809 | 1 | 0.010157 | 0.88226 | 0.00088737 |
| 25 | Accept | 0.194 | 2189.1 | 0.1882 | 0.18808 | 3 | 0.019354 | 0.94156 | 9.6197e-07 |
| 26 | Accept | 0.2192 | 1752.2 | 0.1882 | 0.18809 | 1 | 0.99324 | 0.91165 | 1.1521e-08 |
| 27 | Accept | 0.1918 | 2185 | 0.1882 | 0.18813 | 3 | 0.05292 | 0.8689 | 1.2449e-05 |
__________________________________________________________
Optimization completed. MaxTime of 50400 seconds reached. Total function evaluations: 27 Total elapsed time: 51962.3666 seconds. Total objective function evaluation time: 51942.8833 Best observed feasible point: SectionDepth InitialLearnRate Momentum L2Regularization ____________ ________________ ________ ________________ 3 0.1722 0.8019 4.2149e-06 Observed objective function value = 0.1882 Estimated objective function value = 0.18813 Function evaluation time = 2257.4627 Best estimated feasible point (according to models): SectionDepth InitialLearnRate Momentum L2Regularization ____________ ________________ ________ ________________ 3 0.1722 0.8019 4.2149e-06 Estimated objective function value = 0.18813 Estimated function evaluation time = 2166.2402
評估最終網(wǎng)絡(luò)
加載優(yōu)化中發(fā)現(xiàn)的最佳網(wǎng)絡(luò)及其驗證準確性。
valError = 0.1882
預(yù)測測試集的標簽并計算測試誤差。將測試集中每個圖像的分類視為具有一定成功概率的獨立事件,這意味著錯誤分類的圖像數(shù)量遵循二項式分布。使用它來計算標準誤差(testErrorSE)和testError95CI廣義誤差率的大約95%置信區(qū)間()。這種方法通常稱為Wald方法。
testError = 0.1864
testError95CI = 1×2 0.1756 0.1972
繪制混淆矩陣以獲取測試數(shù)據(jù)。通過使用列和行摘要顯示每個類的精度和召回率。
?
您可以使用以下代碼顯示一些測試圖像及其預(yù)測的類以及這些類的概率。
優(yōu)化目標函數(shù)
定義用于優(yōu)化的目標函數(shù)。
定義卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)。
- 在卷積層上添加填充,以便空間輸出大小始終與輸入大小相同。
- 每次使用最大池化層對空間維度進行2倍的下采樣時,將過濾器的數(shù)量增加2倍。這樣做可確保每個卷積層所需的計算量大致相同。
- 選擇與成正比的濾波器數(shù)量,以1/sqrt(SectionDepth)使不同深度的網(wǎng)絡(luò)具有大致相同數(shù)量的參數(shù),并且每次迭代所需的計算量大致相同。要增加網(wǎng)絡(luò)參數(shù)的數(shù)量和整體網(wǎng)絡(luò)靈活性,請增加numF。要訓(xùn)??練更深的網(wǎng)絡(luò),請更改SectionDepth變量的范圍。
- 使用convBlock(filterSize,numFilters,numConvLayers)創(chuàng)建的塊numConvLayers卷積層,每個具有指定filterSize和numFilters過濾器,并且每個隨后分批正常化層和RELU層。該convBlock函數(shù)在本示例的末尾定義。
指定驗證數(shù)據(jù),然后選擇一個'ValidationFrequency'值,以便trainNetwork每個時期對網(wǎng)絡(luò)進行一次驗證。訓(xùn)練固定的時期數(shù),并在最后一個時期將學(xué)習(xí)率降低10倍。這減少了參數(shù)更新的噪音,并使網(wǎng)絡(luò)參數(shù)的沉降更接近損耗函數(shù)的最小值。
使用數(shù)據(jù)增強可沿垂直軸隨機翻轉(zhuǎn)訓(xùn)練圖像,并將它們隨機水平和垂直轉(zhuǎn)換為四個像素。
訓(xùn)練網(wǎng)絡(luò)并在訓(xùn)練過程中繪制訓(xùn)練進度。
?
?
在驗證集上評估經(jīng)過訓(xùn)練的網(wǎng)絡(luò),計算預(yù)測的圖像標簽,并在驗證數(shù)據(jù)上計算錯誤率。
創(chuàng)建一個包含驗證錯誤的文件名,然后將網(wǎng)絡(luò),驗證錯誤和培訓(xùn)選項保存到磁盤。目標函數(shù)fileName作為輸出參數(shù)bayesopt返回,并返回中的所有文件名BayesObject.UserDataTrace。
該convBlock函數(shù)創(chuàng)建一個numConvLayers卷積層塊,每個卷積層都有一個指定的filterSize和numFilters過濾器,每個卷積層后面都有一個批處理歸一化層和一個ReLU層。
參考文獻
[1]克里熱夫斯基,亞歷克斯。“從微小的圖像中學(xué)習(xí)多層功能。” (2009)。https://www.cs.toronto.edu/~kriz/learning-features-2009-TR.pdf
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的matlab深度学习_matlab使用贝叶斯优化的深度学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微波炉品牌推荐
- 下一篇: 图像分割matlab_基于MATLAB的