解決Alexnet訓(xùn)練模型在每個(gè)epoch中準(zhǔn)確率和loss都會一升一降問題
遇到的問題

當(dāng)時(shí)自己在使用Alexnet訓(xùn)練圖像分類問題時(shí),會出現(xiàn)損失在一個(gè)epoch中增加,換做下一個(gè)epoch時(shí)loss會驟然降低,一開始這個(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è)置過大,會對自己的電腦造成壓力。
補(bǔ)充知識: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)
%對數(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)的可視化,并且最終也會生成一個(gè)混淆矩陣顯示驗(yàn)證集的結(jié)果。
以上這篇解決Alexnet訓(xùn)練模型在每個(gè)epoch中準(zhǔn)確率和loss都會一升一降問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python3隨機(jī)漫步生成數(shù)據(jù)并繪制
這篇文章主要為大家詳細(xì)介紹了Python3隨機(jī)漫步生成數(shù)據(jù)并繪制的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08
Python3爬蟲之urllib攜帶cookie爬取網(wǎng)頁的方法
今天小編就為大家分享一篇Python3爬蟲之urllib攜帶cookie爬取網(wǎng)頁的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
python復(fù)制列表時(shí)[:]和[::]之間有什么區(qū)別
這篇文章主要給大家介紹了關(guān)于python復(fù)制列表時(shí)[:]和[::]之間有什么區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10
python 刪除指定時(shí)間間隔之前的文件實(shí)例
下面小編就為大家分享一篇python 刪除指定時(shí)間間隔之前的文件實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Python實(shí)現(xiàn)多進(jìn)程共享數(shù)據(jù)的方法分析
這篇文章主要介紹了Python實(shí)現(xiàn)多進(jìn)程共享數(shù)據(jù)的方法,結(jié)合實(shí)例形式分析了Python多進(jìn)程共享數(shù)據(jù)的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-12-12
Python使用pytorch動手實(shí)現(xiàn)LSTM模塊
這篇文章主要介紹了Python使用pytorch動手實(shí)現(xiàn)LSTM模塊,LSTM是RNN中一個(gè)較為流行的網(wǎng)絡(luò)模塊。主要包括輸入,輸入門,輸出門,遺忘門,激活函數(shù),全連接層(Cell)和輸出2022-07-07
利用Pandas和Numpy按時(shí)間戳將數(shù)據(jù)以Groupby方式分組
這篇文章主要介紹了利用Pandas和Numpy按時(shí)間戳將數(shù)據(jù)以Groupby方式分組,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Jmeter通過OS進(jìn)程取樣器調(diào)用Python腳本實(shí)現(xiàn)參數(shù)互傳
這篇文章主要介紹了Jmeter通過OS進(jìn)程取樣器調(diào)用Python腳本實(shí)現(xiàn)參數(shù)互傳,描述在cmd中調(diào)用上面的Python腳本并傳入兩個(gè)參數(shù)展開主題,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-03-03

