2017-12-28 25 views
10

나는 여전히 tensorflow에 초보자이며 내 모델의 교육이 진행되는 동안 무엇이 일어나는지를 이해하려고 노력 중입니다. 간단히 말해서, 나는 모델을 ImageNet에 미리 배치하여 finetuning을 내 데이터 세트에 사용하고 있습니다. 여기에 몇 가지 플롯이 개 별도의 모델 tensorboard에서 추출됩니다 tensorboard plot 해석

InceptionV4

Model_1 (InceptionResnet_V2) 

Inception resnet V2

Model_2 (InceptionV4) 
지금까지 두 모델은 가난한 검증 세트에 결과 (평균 아즈 (지역에 따라이 ROC 곡선) = Model_1 & 0.79에 대해 Model_2에 대해 0.7). 이 플롯에 대한 나의 해석은 미니 배치를 통해 가중치가 변경되지 않는다는 것입니다. 미니 일괄 처리를 통해 변경되는 편향 사항 일 뿐이며 문제가 될 수 있습니다. 그러나 나는이 점을 확인하기 위해 어디를보아야할지 모른다. 이것은 내가 생각할 수있는 유일한 해석이지만, 아직 내가 초보자라는 사실을 고려할 때 잘못된 것일 수 있습니다. 당신의 생각을 나에게 나눌 수 있습니까? 필요한 경우 더 많은 플롯을달라고 주저하지 마십시오.

편집 : 아래 그림에서 알 수 있듯이 시간이 지나면 가중치가 거의 변하지 않는 것 같습니다. 이는 두 네트워크의 다른 모든 가중치에 적용됩니다. 이것은 어딘가에 문제가 있다고 생각하게 만들었지 만 해석 방법을 모른다.

InceptionResnetV2 weights 

InceptionV4 weights

InceptionV4 weights 

InceptionResnetV2 weights

EDIT2 : 이 모델이 처음 ImageNet에 훈련을받은 이들 플롯 내 데이터 세트에 그들을 미세 조정의 결과입니다. 저는 약 800000 개의 이미지가있는 19 개 클래스의 데이터 세트를 사용하고 있습니다. 다중 레이블 분류 문제를 수행하고 있으며 손실 함수로 sigmoid_crossentropy를 사용하고 있습니다. 수업은 매우 불균형합니다.의 희소성에 관한

batch_size=32 
weight_decay = 0.00004 #'The weight decay on the model weights.' 
optimizer = rmsprop 
rmsprop_momentum = 0.9 
rmsprop_decay = 0.9 #'Decay term for RMSProp.' 

learning_rate_decay_type = exponential #Specifies how the learning rate is decayed 
learning_rate = 0.01 #Initial learning rate. 
learning_rate_decay_factor = 0.94 #Learning rate decay factor 
num_epochs_per_decay = 2.0 #'Number of epochs after which learning rate 

다음 hyperparams의

Objects  train  validation 
obj_1  3.9832 % 0.0000 % 
obj_2  70.6678 % 33.3253 % 
obj_3  89.9084 % 98.5371 % 
obj_4  85.6781 % 81.4631 % 
obj_5  92.7638 % 71.4327 % 
obj_6  99.9690 % 100.0000 % 
obj_7  90.5899 % 96.1605 % 
obj_8  77.1223 % 91.8368 % 
obj_9  94.6200 % 98.8323 % 
obj_10  88.2051 % 95.0989 % 
obj_11  3.8838 % 9.3670 % 
obj_12  50.0131 % 24.8709 % 
obj_13  0.0056 % 0.0000 % 
obj_14  0.3237 % 0.0000 % 
obj_15  61.3438 % 94.1573 % 
obj_16  93.8729 % 98.1648 % 
obj_17  93.8731 % 97.5094 % 
obj_18  59.2404 % 70.1059 % 
obj_19  8.5414 % 26.8762 % 

값 : 아래 표에서, 우리는 2 개 개의 부분 집합의 각 클래스의 존재의 비율 (기차, 검증)를 표시하고 레이어, 여기에 두 네트워크를위한 레이어의 희소성의 일부 샘플은 다음과 같습니다

sparsity (InceptionResnet_V2) 

enter image description here

sparsity (InceptionV4) 

enter image description here

EDITED3 : 여기에 두 모델에 대한 손실의 플롯은 다음과 같습니다

Losses and regularization loss (InceptionResnet_V2) 

enter image description here

Losses and regularization loss (InceptionV4) 
나는 당신의 평가에 동의

enter image description here

+0

저는 RMSprop에 익숙하지 않지만 그 hyperparameter는 저에게 잘 보입니다. 당신은 또한 상당한 양의 데이터를 가지고 있습니다 ... 나는 auROC가 편향된 분류에 대한 좋은 척도라는 것을 알고 있습니다. 그러나 호기심에서 Top-1 또는 - 바람직하게 - ** Top-5 정확도 **가 있습니까? 실제 ** 손실 값 **에 대한 도표는 어떻습니까? –

+0

필자의 경우 다중 라벨 분류이므로 Top-1 또는 Top-5로 생각할 가능성은 없습니다. 하나의 이미지가 19 개의 다른 클래스 (멀티 클래스에 적용된 하나의 주요 클래스 일뿐만 아니라 분류). 나는 손실 플롯을 추가했다 – Maystro

+0

나의 실수는, 나는 그 문제를 오해했다. 손실 도표를 가져 주셔서 감사합니다. –

답변

5

ment - 가중치는 minibatches에서 크게 변하지 않습니다. 변경되는 것으로 보입니다. 다소입니다.

매우 확신 할 수 있듯이 매우 큰 모델로 미세 조정을 수행하고 있습니다. 따라서 역진이 때로는 시간이 걸릴 수 있습니다. 그러나, 당신은 많은 훈련 반복을하고 있습니다. 나는 이것이 정말로 문제라고 생각하지 않는다.

내가 실수하지 않았다면,이 두 가지는 원래 ImageNet에서 교육을 받았다. 이미지가 ImageNet의 것과 완전히 다른 도메인에 있다면 문제를 설명 할 수 있습니다.

backprop equations은 특정 활성화 범위에서 바이어스가 변경되는 것을 쉽게 만듭니다. 모델이 매우 희박한 경우 ReLU가 1이 될 수 있습니다 (즉, 많은 레이어의 활성화 값이 0이면 가중치가 조정하려고하지만 편향은 발생하지 않음). 또한 활성화가 [0, 1] 범위에있는 경우, 가중치에 대한 그래디언트는 바이어스에 대한 그래디언트보다 높습니다. (Sigmoid가 나쁜 활성화 기능인 이유입니다.)

또한 읽기 전용 레이어와 관련이있을 수 있습니다. 구체적으로 활성화 기능입니다. 어떻게 오류를 계산하고 있습니까? 이것은 분류 또는 회귀 문제입니까? 가능하다면 최종 활성화 기능으로 Sigmoid 이외의 것을 사용하는 것이 좋습니다. tanh은 약간 더 좋을 수 있습니다. 선형 판독은 때때로 학습 속도도 향상시킵니다 (모든 그라디언트는 판독 레이어를 "통과"해야합니다.) 판독 레이어의 파생물이 항상 1 - 선형 인 경우 "더 많은 그래디언트를 통해"더 가중치를 조정해야합니다 모델).

마지막으로 귀하의 가중치 막대 그래프가 음수 가중치쪽으로 밀려나는 것을 확인합니다. 때로는 특히 ReLU 활성화가 많은 모델의 경우 모델 학습 희소성의 지표가 될 수 있습니다. 또는 죽은 뉴런 문제의 지표. 또는 둘 다 - 둘은 다소 연관되어 있습니다.

궁극적으로, 귀하의 모델이 궁금해합니다. Inception을 재 훈련하는 매우 유사한 히스토그램을 접했습니다. 저는 약 2000 개의 이미지 데이터 세트를 사용하고 있었고, 80 % 이상의 정확도로 밀어 붙이기 위해 고심하고있었습니다 (데이터 세트가 크게 편중되었습니다 - 그 정확도는 대략적으로 추측과 비슷했습니다).그것은 컨볼 루션 변수를 일정하게 만들고 완전히 연결된 레이어 만 변경했을 때 도움이되었습니다.


실제로 이것은 분류 문제이며 Sigmoid Cross Entropy가 적절한 활성화 함수입니다. 그리고 이러한 모델을 세밀하게 조정하기에 충분한 크기의 데이터 세트가 있습니다.

이 새로운 정보를 사용하면 초기 학습률을 낮추는 것이 좋습니다. 여기에 두 가지 추론이 있습니다 :

(1) 내 경험입니다. 앞서 언급했듯이 RMSprop에 익숙하지 않습니다. 나는 단지 DNC의 컨텍스트 (컨볼 루션 컨트롤러가있는 DNC)에서 사용했지만 경험에 대한 나의 경험은 내가 말하고자하는 것을 뒷받침합니다. 제 생각에 .01은 처음부터 모델을 훈련 할 때 최고입니다. 아담에게는 확실히 높습니다. 어떤 의미에서는 작은 학습 속도로 시작하는 것이 미세 조정의 "훌륭한"부분입니다. 가중치가 너무 많이 이동하지 않도록하십시오. 특히 마지막 (몇) 레이어가 아닌 전체 모델을 조정하는 경우 특히 그렇습니다.

(2)는 희박성이 증가하고 음의 가중치로 이동합니다. 귀하의 희박성 플롯 (좋은 아이디어 btw)을 기반으로, 과도한 수정의 결과로 일부 가중치가 희박한 구성에 머물러있는 것처럼 보입니다. 즉, 높은 초기 속도의 결과로 가중치가 최적의 위치를 ​​'지나치게 (overshooting)'놓고 어딘가에 갇히게되어 모델을 복구하고 모델에 기여하기 어렵게 만듭니다. 즉, 약간 음수이고 0에 가까울수록 ReLU 네트워크에서 좋지 않습니다.

필자는 (반복적으로) 언급했듯이 RMSprop에 익숙하지 않습니다. 하지만, 이미 많은 훈련 반복을하고 있기 때문에, 낮게, 낮게, 을 낮추십시오. 최저 속도로 샷을하고 작업하십시오. 내 말은, 1e-8이 어떻게 작동하는지보십시오. 모델이 낮은 속도로 교육에 응답하지 않을 수도 있지만 학습 속도로 비공식적 인 하이퍼 매개 변수 검색을 수행 할 수 있습니다. Adam을 사용한 Inception을 사용한 경험에서 1e-4 ~ 1e-8이 잘 작동했습니다.

+0

의견을 보내 주셔서 감사합니다. 제 질문을 수정했습니다. – Maystro

+0

@Maystro 편집 내용에 따라 편집하십시오. 희망이 도움이됩니다. –

+0

감사합니다. @Dylan F. 1e-4의 학습 속도를 사용하여 다른 교육을 시작했으며 제안한 학습 속도의 범위로 adam optimizer를 사용하여 또 다른 교육을 시작합니다. 제가 결과를 얻 자마자 곧 다시 연락 할 것입니다. – Maystro