0

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 

답변

0

"데이터 세트 A. 내 네트워크를 미세 조정 때 난 단지 pretrained 네트워크의 세 가지 초기 층 (전환, relu, 수영장)을 받아"

relu와 pool은 교육 할 수 없으므로, 기본적으로 사전 네트워크에서 한 레이어 만 사용했습니다. 첫 번째 전환 레이어는 일부 가장자리 감지를 수행하며 높은 수준의 시각적 개념을 캡처하지 않습니다. 전송 학습을위한 최상의 방법은 상위 계층의 ImageNet 사전 학습 된 기능을 사용하는 것입니다. 먼저 큰 데이터 세트에서 미세 조정 한 다음 작은 데이터 세트에서 미세 조정할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다 @DataHungry. 또한 3 전환 레이어를 사용하여 동일한 작업을 시도했지만 그 결과도 더 나빴습니다. 내가 제안한대로 ImageNet을 사용해 보겠습니다. Matlab에서 "높은 수준의 사전 훈련 된 기능"을 어떻게 구현할 수 있는지 알고 있습니까? 프리 트레인 된 네트워크를로드하고 첫 번째 레이어를 몇 개 가져 와서 내 레이어를 따르십니까? – Nicole

+0

@ 니콜 (Nicole) 몇 가지 첫 번째 네트워크뿐만 아니라 사전 네트워크의 대부분의 레이어를 유지해야합니다. 나는 당신에게 권합니다. (1) 미리 훈련 된 네트워크를로드하십시오. (2) 마지막 여러 레이어를 제거합니다. (3) 귀하의 문제에 적응하기 위해 여러 개의 레이어를 첨부하십시오. – DataHungry

+0

좋습니다, 안내해 주셔서 감사합니다! 나는 그것을 시도 할 것이다. – Nicole