2017-11-22 3 views
1

나는 CNN을 잠시 동안 공부해 왔지만 아직 그것에 대해 잘 모른다. 그래서 중요한 것으로 생각한 것을 삽입했습니다.내 모델이 잘 작동합니까?

저는 10 개의 클래스가있는 1400 개의 이미지가 포함 된 손 제스처의 데이터 세트가 있습니다. 나는 spyder IDE에서 keras에 CNN 모델을 구축하고 있습니다. 순차가 아래에 있습니다.

model = Sequential() 

model.add(Convolution2D(32, 3,3,border_mode='same', input_shape=input_shape)) 
model.add(Activation('relu')) 
model.add(Convolution2D(32, 3, 3)) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.5)) 

model.add(Convolution2D(64, 3, 3)) 
model.add(Activation('relu')) 
model.add(Convolution2D(64, 3, 3)) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.5)) 

model.add(Convolution2D(64, 3, 3)) 
model.add(Activation('relu')) 
model.add(Convolution2D(64, 3, 3)) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.5)) 

model.add(Flatten()) 
model.add(Dense(64)) 
model.add(Activation('relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(num_classes)) 
model.add(Activation('softmax')) 

model.compile(loss='categorical_crossentropy', optimizer='rmsprop',metrics=["accuracy"]) 

나는 30 시대와 함께 훈련을 얻었다 : loss

Q1을

Test Loss: 0.260991449015 
Test accuracy: 0.928571430274 

      precision recall f1-score support 

    class 0  1.00  0.93  0.96  28 
    class 1  0.96  0.96  0.96  26 
    class 2  0.92  1.00  0.96  24 
    class 3  0.72  0.87  0.79  30 
    class 4  0.97  0.97  0.97  35 
    class 5  0.90  0.93  0.92  29 
    class 6  0.93  1.00  0.97  28 
    class 7  1.00  0.97  0.98  33 
    class 8  1.00  0.95  0.97  19 
    class 9  0.95  0.71  0.82  28 

avg/total  0.93  0.93  0.93  280 

Confusion matrix, without normalization 
[[26 0 0 0 1 0 1 0 0 0] 
[ 0 25 1 0 0 0 0 0 0 0] 
[ 0 0 24 0 0 0 0 0 0 0] 
[ 0 0 1 26 0 3 0 0 0 0] 
[ 0 1 0 0 34 0 0 0 0 0] 
[ 0 0 0 1 0 27 1 0 0 0] 
[ 0 0 0 0 0 0 28 0 0 0] 
[ 0 0 0 0 0 0 0 32 0 1] 
[ 0 0 0 1 0 0 0 0 18 0] 
[ 0 0 0 8 0 0 0 0 0 20]] 

accuracy,이 모델은 잘하고 있나요? Q2 : 지나치게 적합합니까? Q3 : 최선의 방법으로 CNN을 어떻게 모델링 할 수 있습니까?

은 행렬의 대각선 부분에 매우 높은 숫자를 가지고있다 테스트 데이터 세트의 사용자의 혼동 행렬을 고려하여 시간

+0

피팅이 맞는지 테스트하고, 일부 데이터를 열차 세트와 테스트 세트로 분할 한 다음 훈련 세트가 테스트 세트를 실행하기 시작하면 일반화가 잘되지 않으므로 모델이 지나치게 맞습니다. 새로운 보이지 않는 데이터. – DJK

+0

나는 혼돈 행렬, precison과 recal table, sequential의 이미지를 넣어서 편집하려고한다. 그러나 올바른 형식이 아닌 코드가 있다고 말합니다. 사실 나는 아무 것도 가지고 있지 않습니다. – Sohib

+0

문제는이 질문에 대한 정확한 대답이 없기 때문에 닫혔습니다. ANN은 올바르게 설정되어있는 한 항상 올바르게 작동합니다. 모델을 개선하기 위해 올바른 대답을 제공 할 수 없습니다. 따라서 Q1과 Q3는 답할 수 없습니다 (기술적으로 ..). – DJK

답변

2

주셔서 감사합니다, 거의 제로 다른 곳은 제외 모델이 제대로 장착했다는 표시입니다 (혼란 행렬에 8을 입력 한 경우).

언급 한대로 데이터 세트를 살펴보면 10 개의 클래스가있는 1400 개의 이미지 만 포함되어 있으며 평균적으로 클래스 당 140 개의 이미지가 있습니다. 신경망이 일반화 되기에는 140 가지의 예제가 실제로 좋은 숫자는 아닙니다. 귀하의 데이터 세트에 얼마나 다양성이 있으며 귀하의 네트워크를 프로덕션 환경에 어떻게 배치 하시겠습니까? 예를 들어, 데이터 세트에 녹색 배경을 가진 모든 이미지가 있고 직접 손 이미지 만 존재한다고 가정합니다. 테스트를하는 동안 녹색의 배경과 손으로 만 표시된 이미지를 시뮬레이트 할 수 있다면 네트워크가 제대로 작동 할 수 있습니다. 그러나 이러한 유형의 조건이 시뮬레이트되지 않고 모델을 프로덕션 환경에 배포하면 모델이 잘못 수행 될 가능성이 높습니다.

데이터 집합에 다양성을 추가하려면 네트워크에서 필요한 기능을 더 많이 습득 할 수 있도록 다양한 유형의 왜곡을 시뮬레이션하고 ImageDataGenerator을 시뮬레이션 할 수 있습니다.

+0

고마워요! ImageDataGenerator에 액세스 할 수 없습니다. 그것은 작동하지 않습니다! – Sohib

관련 문제