MatConvNet에서 컨볼 루션 뉴럴 네트워크로 감정 인식을하고 있습니다. 나는 동일한 클래스의 하나의 주된 큰 데이터 세트 (A 40,000의 사진)와 두 개의 더 작은, 더 작은 데이터 세트 (B, C 5.000의 사진)를 가지고있다. 랜덤 웨이트 초기화로 네트워크 A를 실행하면 70 %의 정확도를 얻습니다.컨벌루션 뉴럴 네트워크에서의 트랜스퍼 학습의 성능 저하
따라서 동일한 네트워크 아키텍처에서 데이터 세트 B와 C에 사전에 가중치를 적용하여 성능을 높이고 싶습니다. 데이터 셋 A에서 네트워크를 finetuning 할 때 사전 네트워크에서 3 개의 초기 레이어 (conv, relu, pool) 만 가져옵니다. 그러나 임의의 가중치보다 낮은 결과를 얻습니다. 나는 또한 모든 레이어, 6 개의 첫 번째 레이어 및 하나의 첫 번째 레이어를 가져 가려고했습니다.
저는 이것을 올바르게 이해하고 구현합니까? 처음 3 개의 레이어에서 무작위로 가중치 대신 (실제로는 첫 번째 레이어에서 - 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 전환 레이어를 사용하여 동일한 작업을 시도했지만 그 결과도 더 나빴습니다. 내가 제안한대로 ImageNet을 사용해 보겠습니다. Matlab에서 "높은 수준의 사전 훈련 된 기능"을 어떻게 구현할 수 있는지 알고 있습니까? 프리 트레인 된 네트워크를로드하고 첫 번째 레이어를 몇 개 가져 와서 내 레이어를 따르십니까? – Nicole
@ 니콜 (Nicole) 몇 가지 첫 번째 네트워크뿐만 아니라 사전 네트워크의 대부분의 레이어를 유지해야합니다. 나는 당신에게 권합니다. (1) 미리 훈련 된 네트워크를로드하십시오. (2) 마지막 여러 레이어를 제거합니다. (3) 귀하의 문제에 적응하기 위해 여러 개의 레이어를 첨부하십시오. – DataHungry
좋습니다, 안내해 주셔서 감사합니다! 나는 그것을 시도 할 것이다. – Nicole