2017-12-30 25 views
0

에러 것으로 예상 dense_11를 해결하는 방법 : 점검 대상 때4 차원 내가 Keras와 길쌈 신경 네트워크를 구축 한 일부 오류가있어

오류 : 예상 dense_11 4 개 차원을 가지고, 하지만 배열을 가지고 모양 (48986, 12)

나는 지식이 부족하기 때문에 무엇을 고쳐야할지 전혀 모른다. 누군가 이유를 설명하고 해결책을 제안 할 수 있습니까?

input_shape = (99, 81, 1) 
nclass = 12 

model = Sequential() 
model.add(Dense(32, input_shape=input_shape)) 
model.add(Convolution2D(8,3,3,activation='relu')) 
model.add(MaxPooling2D((2,2), strides=(2,2))) 

model.add(Dense(128, activation='relu')) 
model.add(Dense(128, activation='relu')) 
model.add(Dense(nclass, activation='softmax')) 

x_train, x_valid, y_train, y_valid = train_test_split(x_train, y_train, test_size=0.1, random_state=2017) 
#vgg 
batch_size = 128 
nb_epoch = 1 

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) 
#model.fit(x_train,y_train,nb_epoch= nb_epoch,batch_size = batch_size , validation_split=0.1) 
model.fit(x_train, y_train, batch_size=16, validation_data=(x_valid, y_valid), epochs=3, shuffle=True, verbose=2) 
model.save(os.path.join(model_path, 'vgg16.model')) 

x_train는 형상을 갖고 (99, 81, 1) 및 nclass 출력 12이어야한다. 다시 오류에

답변

1

보면 :
"오류 대상 검사 : 예상 dense_11 4 개 차원을 가지고 있지만, 형상 (48,986, 12)와 함께 배열 얻었다 방법"- 대상 = 라벨/출력
의미를 출력 모양에 문제가 있습니다. 형상

_________________________________________________________________ 
Layer (type)     Output Shape    Param # 
================================================================= 
dense_1 (Dense)    (None, 99, 81, 32)  64   
_________________________________________________________________ 
conv2d_1 (Conv2D)   (None, 97, 79, 8)   2312  
_________________________________________________________________ 
max_pooling2d_1 (MaxPooling2 (None, 48, 39, 8)   0   
_________________________________________________________________ 
dense_2 (Dense)    (None, 48, 39, 128)  1152  
_________________________________________________________________ 
dense_3 (Dense)    (None, 48, 39, 128)  16512  
_________________________________________________________________ 
dense_4 (Dense)    (None, 48, 39, 12)  1548  
================================================================= 
Total params: 21,588 
Trainable params: 21,588 
Non-trainable params: 0 
_________________________________________________________________ 

층 최종 출력 예측 : (없음, 48,39,12)

예상 된 출력 형태가 무엇인지 확인하기 위해 모델 요약을 인쇄 할 수 있습니다.
조밀도 레이어가 모양 (없음, 48,39,8)으로 입력을 받고 Keras 구현에 따라 조밀 레이어가 마지막 치수의 맨 위에있는 장소라는 것을 알 수 있습니다.> 의미 : 128의 고밀도 레이어 모양 (None, 48,39,8)으로 입력 된 노드는 (None, 48,39,)을 출력합니다.

해결 방법은 수행 할 작업과 레이블의 모양 (출력 내용)이 무엇인지에 따라 다릅니다.
예를 들어, 모델의 출력 모양이 (nclass, 1)보다 큰 경우 MaxPool 레이어 이후에 데이터를 병합 할 수 있습니다.
라벨 모양을 (없음, 48, 39, 12)로 변경해야하는 경우.

행운을 빌어 요.

+0

maxpool layer error가 나간 후에 납작하게 부탁드립니다. 하지만 CNN에서 왜 평평하게하는지 이해하지 못하고 왜 maxpool 이후에 추가해야하는지, 내 문제를 해결하는 이유는 무엇입니까 –

+0

모델 요약에 따르면 (코드에 model.summary()를 작성하여 인쇄 할 수 있습니다) MaxPool 레이어 ** ** (없음, 48, 39, 8) **. Flatten은 각 입력을 받아 1D 배열로 바꿉니다. 귀하의 경우 Flatten은 (None, 48 * 39 * 8) = (None, 14976)을 출력합니다. Dense 레이어는 각 14976 노드에서 "작동"하므로 최종 출력은 원하는대로 (None, nclass)가됩니다. Flatten을 사용하지 않으면 조밀 한 레이어가 내 답변에서 볼 수있는 것처럼 출력됩니다 (None, 48, 39, nclass). 원하는 것은 아닙니다. 희망을 이해하는 데 도움이 .. 내 대답을 받아 들일 수 있다면 upvode :) –

+1

@ Kimsangwon 답변이 문제를 해결했기 때문에 친절하게 받아들입니다 (응답은 응답자에게 귀중한 시간을 차지합니다) – desertnaut