2017-10-11 3 views
1

아래의 cnn 아키텍처를 개선하려고합니다. 이미지 분류에 cnn을 사용하고 있습니다. 누구든지 너무 많은 정확도를 잃어 버리지 않고 교육 시간을 단축 할 수있는 아키텍처의 변경 사항을 제안 할 수 있습니까? 아키텍처cnn의 교육 시간 단축

주 :

그것은 신경망의 초기 입력을 처리하는 3,3- 창을 이용하여 16 개 개의 필터의 컨볼 루션 층을 갖는다.

가 그것은 2,2-

다음의 최대 풀링 층에 뒤따라, 이전 층에서 통과 된 데이터를 보존하기 위해 제 층과 동일한 크기이며 다른 컨벌루션 층이다.

첫 번째 2 개의 레이어 다음에 세 번째 길쌈 레이어가 32 개의 필터를 포함하므로 네트워크가 세부 정보를보고 더 많은 데이터를위한 공간을 확보 할 수 있습니다.

세 번째 계층은 전역 평균 풀링 계층을 생성했으며이 계층은 완전히 연결된 계층에 공급됩니다.

첫 번째 완전히 연결된 숨겨진 레이어는 출력 레이어가 버터가 더 많은 가중치를 결정할 수있는 공간을 제공하기 전에 버터를 허용하기 위해 64 단위를 사용합니다.

마지막으로 예측을 만드는 출력 레이어로지나 가기 전에 오버 피팅을 방지하는 드롭 아웃 레이어가 뒤 따른다.

출력 레이어는 softmax 활성화 함수를 가지고있어서 0-1 사이의 확률 분포를 유지합니다.

CNN 번호 :

연수 연산의 대부분이 제 Conv2D 층에서 일어나는
from keras.layers import Conv2D, MaxPooling2D, GlobalAveragePooling2D 
from keras.layers import Dropout, Flatten, Dense 
from keras.models import Sequential 

model = Sequential() 
model.add(Conv2D(16, (3,3), input_shape=(224,224,3), activation = 'relu')) 
model.add(MaxPooling2D(pool_size=(2,2))) 
model.add(Conv2D(16, (3,3), activation= 'relu')) 
model.add(MaxPooling2D(pool_size =(2,2))) 
model.add(Conv2D(32, (3,3), activation= 'relu')) 
model.add(GlobalAveragePooling2D()) 
model.add(Dense(units=64, activation= 'relu')) 
model.add(Dropout(0.3)) 
model.add(Dense(units= 133, activation = 'softmax')) 
model.summary() 
+0

이미지는 비교적 크기가 커서 (224x224x3) 크기가 작아지고 성능에 미치는 영향을 확인하십시오. 이미지에 따라 사전에 그레이 스케일로 변환 해보십시오. – aseipel

답변

1

이 층에서의 크기 3x3(224 - 2)*(224 - 2) = 49284 공간 패치 16 필터가있다

Conv2D(16, (3,3), input_shape=(224,224,3), activation = 'relu') 

합계는 역방향 패스에 대해 거의 800k (정확하게는 788544) 회선 연산을 제공합니다. 그리고 이것은 배치 크기를 고려하지 않습니다.

내가 제안하는 것은 striding을 첫 번째 레이어에 사용하는 것입니다. 예를 들어 strides=(2, 2)은 패치 수를 4 회 줄입니다. 또한 네트워크는 스트라이드를 사용하여 다운 샘플링을 수행합니다. 즉, 다음 MaxPooling2D 레이어를 제거하고 컨벌루션 레이어만으로 동일한 피쳐 맵 크기를 얻을 수 있습니다.

물론 네트워크는 약간의 유연성을 잃을 것이지만 그 정도의 정확성에는 영향을 미치지 않습니다.