나는 convnets와 함께 조금 놀고 있습니다. 특히, 고양이 또는 개 (각 12500)로 표시된 25000 개의 이미지로 구성된 kaggle cats-vs-dogs 데이터 세트를 사용하고 있습니다.
테스트 세트에서 약 85 %의 분류 정확도를 달성했지만 90 %의 정확도 달성 목표를 설정했습니다.
내 주요 문제는 과적 합입니다. 어쨌든 항상 발생합니다 (일반적으로 8 ~ 10 일 후). 내 네트워크의 아키텍처는 VGG-16에서 느슨하게 영감을 얻었습니다. 더 구체적으로 내 이미지는 크기로 조정 된 다음 실행합니다.
Convolution 1 128x128x32 (kernel size is 3, strides is 1)
Convolution 2 128x128x32 (kernel size is 3, strides is 1)
Max pool 1 64x64x32 (kernel size is 2, strides is 2)
Convolution 3 64x64x64 (kernel size is 3, strides is 1)
Convolution 4 64x64x64 (kernel size is 3, strides is 1)
Max pool 2 32x32x64 (kernel size is 2, strides is 2)
Convolution 5 16x16x128 (kernel size is 3, strides is 1)
Convolution 6 16x16x128 (kernel size is 3, strides is 1)
Max pool 3 8x8x128 (kernel size is 2, strides is 2)
Convolution 7 8x8x256 (kernel size is 3, strides is 1)
Max pool 4 4x4x256 (kernel size is 2, strides is 2)
Convolution 8 4x4x512 (kernel size is 3, strides is 1)
Fully connected layer 1024 (dropout 0.5)
Fully connected layer 1024 (dropout 0.5)
마지막 레이어를 제외한 모든 레이어는 활성화 기능으로 relus를 갖습니다.
나는 여러 가지 컨벌루션 조합을 시도했습니다 (더 간단한 컨볼 루션으로 시작했습니다).
또한 이미지를 미러링하여 데이터 세트를 보강하여 총 50000 개의 이미지를 갖습니다.
또한 최소 최대 정규화를 사용하여 이미지를 정규화하고 있습니다. 여기서 X는 이미지입니다.
코드는 tensorflow로 작성되며 배치 크기는 128입니다.
훈련 데이터의 미니 배치는 결과적으로 과적 합하고 100 %의 정확도를 가지지 만 검증 데이터는 약 84-85 %에서 학습을 중단하는 것으로 보입니다.
또한 드롭 아웃 비율을 높이거나 낮추려고했습니다.
사용중인 최적화 프로그램은 학습 속도가 0.0001 인 AdamOptimizer입니다.
현재 지난 3 주 동안이 문제를 해결해 왔으며 85 %가 내 앞에서 장벽을 설정 한 것으로 보입니다.
기록적으로, 전학 학습을 사용하여 훨씬 더 높은 결과를 얻을 수 있다는 것을 알고 있지만이 네트워크를 자체 학습 경험으로 구축하는 데 흥미가 있습니다.
최신 정보:
다른 배치 크기로 SAME 네트워크를 실행하고 있습니다.이 경우 훨씬 작은 배치 크기 (128 대신 16)를 사용하고 있습니다 (85 % 대신 87.5 % 정확도). 즉, 네트워크는 어쨌든 과적 합하게됩니다. 여전히 50 %의 드롭 아웃이 어떻게 도움이되지 않는지 이해가되지 않습니다. 분명히 뭔가 잘못하고 있습니다. 어떤 아이디어?
업데이트 2 :
작은 크기 (128 대신 16)로 문제가 배치 크기와 관련이있는 것처럼 보입니다. 현재 테스트 세트에서 92.8 %의 정확도를 달성하고 있습니다. 배치 크기가 작을수록 네트워크가 여전히 적합합니다 (미니 배치가 끝납니다) 그러나 100 %의 정확도로 손실 (오류)이 계속 감소하고 일반적으로 더 안정적입니다. 단점은 실행 시간이 훨씬 느리지 만 기다릴만한 가치가 있습니다.