0

我在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 

回答

0

「的數據集A.微調我的網絡時,我只需要從預訓練網絡三個初始層(轉化,RELU,池)」

由於relu和池不可訓練,所以基本上只使用了預訓練網絡中的一層。第一個conv層只是做了一些邊緣檢測,並沒有捕獲任何高級視覺概念。 轉移學習的最佳實踐是使用來自高層的ImageNet預訓練功能。您可以先在大數據集上對其進行微調,然後在小數據集上對其進行微調。

+0

感謝您的答案@DataHungry。我也試圖用3個conv層做同樣的事情,但結果也更糟糕。按照您的建議,我會嘗試使用ImageNet。你知道我如何在Matlab中實現「從高級預訓練特徵」?我加載預訓練的網絡,從它的幾個第一層,然後我跟着我自己的層? – Nicole

+0

@Nicole你應該保留預訓練網絡的大部分層次,不僅僅是第一個。我建議你:(1)加載預訓練網絡。 (2)刪除最後幾個圖層。 (3)附上幾層以適應您的問題 – DataHungry

+0

好的,謝謝指導!我會試試看。 – Nicole