解決Alexnet訓(xùn)練模型在每個(gè)epoch中準(zhǔn)確率和loss都會(huì)一升一降問題
遇到的問題
當(dāng)時(shí)自己在使用Alexnet訓(xùn)練圖像分類問題時(shí),會(huì)出現(xiàn)損失在一個(gè)epoch中增加,換做下一個(gè)epoch時(shí)loss會(huì)驟然降低,一開始這個(gè)問題沒有一點(diǎn)頭緒,我數(shù)據(jù)也打亂了,使用的是tf.train.shuffle_batch
在capacity中設(shè)置一個(gè)值,比如是1000吧,每次取一千個(gè)數(shù)據(jù)后將這一千個(gè)數(shù)據(jù)打亂,本次使用的數(shù)據(jù)集就是每個(gè)種類1000多,而我加載數(shù)據(jù)時(shí)是一類一類加載的,這就造成了每一批次的開始可以跟前一類數(shù)據(jù)做打亂處理,但是在中間數(shù)據(jù)并不能達(dá)到充分的shuffle
解決問題
在加載數(shù)據(jù)集的時(shí)候用numpy中的shuffle將數(shù)據(jù)集充分的打亂后在讀入tfrecord中,之后讀取的時(shí)候使用tf.tain.shuffle_batch和使用tf.train.batch就沒有區(qū)別了。另外capacity這個(gè)數(shù)值不益設(shè)置過大,會(huì)對(duì)自己的電腦造成壓力。
補(bǔ)充知識(shí):MATLAB中使用AlexNet、VGG、GoogLeNet進(jìn)行遷移學(xué)習(xí)
直接貼代碼,具體用法見注釋:
clc;clear; net = alexnet; %加載在ImageNet上預(yù)訓(xùn)練的網(wǎng)絡(luò)模型 imageInputSize = [227 227 3]; %加載圖像 allImages = imageDatastore('.\data227Alexnet',... 'IncludeSubfolders',true,... 'LabelSource','foldernames'); %劃分訓(xùn)練集和驗(yàn)證集 [training_set,validation_set] = splitEachLabel(allImages,0.7,'randomized'); %由于原始網(wǎng)絡(luò)全連接層1000個(gè)輸出,顯然不適用于我們的分類任務(wù),因此在這里替換 layersTransfer = net.Layers(1:end-3); categories(training_set.Labels) numClasses = numel(categories(training_set.Labels)); %新的網(wǎng)絡(luò) layers = [ layersTransfer fullyConnectedLayer(numClasses,'Name', 'fc','WeightLearnRateFactor',1,'BiasLearnRateFactor',1) softmaxLayer('Name', 'softmax') classificationLayer('Name', 'classOutput')]; lgraph = layerGraph(layers); plot(lgraph) %對(duì)數(shù)據(jù)集進(jìn)行擴(kuò)增 augmented_training_set = augmentedImageSource(imageInputSize,training_set); opts = trainingOptions('adam', ... 'MiniBatchSize', 32,... % mini batch size, limited by GPU RAM, default 100 on Titan, 500 on P6000 'InitialLearnRate', 1e-4,... % fixed learning rate 'LearnRateSchedule','piecewise',... 'LearnRateDropFactor',0.25,... 'LearnRateDropPeriod',10,... 'L2Regularization', 1e-4,... constraint 'MaxEpochs',20,.. 'ExecutionEnvironment', 'gpu',... 'ValidationData', validation_set,... 'ValidationFrequency',80,... 'ValidationPatience',8,... 'Plots', 'training-progress') net = trainNetwork(augmented_training_set, lgraph, opts); save Alex_Public_32.mat net [predLabels,predScores] = classify(net, validation_set); plotconfusion(validation_set.Labels, predLabels) PerItemAccuracy = mean(predLabels == validation_set.Labels); title(['overall per image accuracy ',num2str(round(100*PerItemAccuracy)),'%'])
MATLAB中訓(xùn)練神經(jīng)網(wǎng)絡(luò)一個(gè)非常大的優(yōu)勢就是訓(xùn)練過程中各項(xiàng)指標(biāo)的可視化,并且最終也會(huì)生成一個(gè)混淆矩陣顯示驗(yàn)證集的結(jié)果。
以上這篇解決Alexnet訓(xùn)練模型在每個(gè)epoch中準(zhǔn)確率和loss都會(huì)一升一降問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)現(xiàn)pptx批量向PPT中插入圖片
大家好,本篇文章主要講的是python實(shí)現(xiàn)pptx批量向PPT中插入圖片,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2022-02-02pycharm中選中一個(gè)單詞替換所有重復(fù)單詞的實(shí)現(xiàn)方法
這篇文章主要介紹了pycharm中選中一個(gè)單詞替換所有重復(fù)單詞的實(shí)現(xiàn)方法,類似于sublime 里的ctrl+D功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-11-11python標(biāo)準(zhǔn)庫sys和OS的函數(shù)使用方法與實(shí)例詳解
這篇文章主要介紹了python標(biāo)準(zhǔn)庫sys和OS的函數(shù)使用方法與實(shí)例詳解,需要的朋友可以參考下2020-02-02python str()如何將參數(shù)轉(zhuǎn)換為字符串類型
這篇文章主要介紹了python str()如何將參數(shù)轉(zhuǎn)換為字符串類型的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06python常用的時(shí)間模塊之datetime模塊示例詳解
這篇文章主要介紹了python常用的時(shí)間模塊之datetime模塊,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05