我在MatConvNet中用卷積神經網絡進行情緒識別。我有一個主要的大數據集(A有40.000圖片)和兩個較硬的,較小的數據集(B,C有5.000圖片)和相同的類。當我使用隨機權重初始化在數據集A上運行網絡時,我的準確性達到了70%。在卷積神經網絡中傳遞學習的性能更差
因此,我想通過在同一網絡架構上預先訓練數據集B和C上的權重來提高性能。當我在數據集A上調整網絡時,我只從預訓練網絡獲取三個初始圖層(conv,relu,pool)。但是,我得到的結果比隨機權重要低。我也嘗試了所有的圖層,六個第一層和一個第一層。
我的理解和實施的權利?而不是前三層中的隨機權重(實際上只是第一個 - conv),我使用預訓練網絡中的那些。現在我不確定我是否理解這個概念。
我用下面的微調代碼:
net = load('net-epoch-100.mat');
trainOpts.learningRate = [0.004*ones(1,25), 0.002*ones(1,25),
0.001*ones(1,25), 0.0005*ones(1,25)]; %I set much higher training rate
%for pretraining on datasets B and C
net.layers=net.layers(1:end-13); %only taking first three layers from pretrained net
... the rest of the layers
感謝您的答案@DataHungry。我也試圖用3個conv層做同樣的事情,但結果也更糟糕。按照您的建議,我會嘗試使用ImageNet。你知道我如何在Matlab中實現「從高級預訓練特徵」?我加載預訓練的網絡,從它的幾個第一層,然後我跟着我自己的層? – Nicole
@Nicole你應該保留預訓練網絡的大部分層次,不僅僅是第一個。我建議你:(1)加載預訓練網絡。 (2)刪除最後幾個圖層。 (3)附上幾層以適應您的問題 – DataHungry
好的,謝謝指導!我會試試看。 – Nicole