2017-05-12 2 views
1

목표 : 5 개의 이미지 집합을 평가하고 이미지를 출력으로 생성합니다.Keras 오류 피팅 모델 : 제공된 요소가 너무 많습니다.

문제점 : 현재 오류가 발생했습니다. 제공된 요소가 너무 많습니다.

면책 조항 : 나는 Keras 및 전체 깊은 학습에 새로운 해요, 나는 완전히이 방법이 잘못 것으로 기대하지만 난이 오류

에게 출력의 모양을 받고 있어요 이유를 이해하고 싶습니다 입력 한 내용이 나에게 맞습니다.

나는의 형태로 출력을 단지 조밀 한 층을 만드는 시도 (없음, 6912).
내가 출력이 Conv2d 할 필요 시도했지만 출력이 왜 그때, 나는 확신 다음과 같은 오류가 나는 얻을 (46,46,3)와하지 (48,48,3)

Error when checking target: expected conv2d_1 to have shape (None, 46, 46, 3) but got array with shape (379, 48, 48, 3) 

코드 :

width = 48 
height = 48 
png = [] 

for image_path in glob.glob(r"D:\temp\*.png"): 
    png.append(misc.imread(image_path)) 

im = np.asarray(png) 
print ('dataset: ', im.shape) 

window = 6 
dataset = np.zeros([len(im) - window, window,width,height,3]) 
for i in range(len(dataset)): 
    dataset[i, :] = im[i:i + window] 
x_train = dataset[:,:-1] 
y_train = dataset[:,-1] 
y_train1 = y_train.reshape(-1,width*height*3) 

print("x_train: ", x_train.shape) 
print("y_train:" ,y_train.shape) 
print("y_train1:" ,y_train1.shape) 

model = Sequential() 
model.add(Conv3D(filters=40, 
       kernel_size=(5,10,10), 
       input_shape=(5,width,height,3), 
       padding='same', 
       activation='relu')) 
model.add(Activation('relu')) 
model.add(Conv3D(filters=40, 
       kernel_size=(3,3,3), 
       padding='same', 
       activation='relu')) 

model.add(Flatten()) 
model.add(Dropout(0.5)) 
model.add(Dense(width * height * 3, activation='softmax')) 
model.add(Reshape((48,48,3))) 

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

print("model Input: " ,model.input_shape) 
print("model output:", model.output_shape) 

model.fit(x_train, y_train, batch_size=10, epochs=300, validation_split=0.05) 

출력 :

Using TensorFlow backend. 
dataset: (385, 48, 48, 3) 
x_train: (379, 5, 48, 48, 3) 
y_train: (379, 48, 48, 3) 
y_train1: (379, 6912) 
model Input: (None, 5, 48, 48, 3) 
model output: (None, 48, 48, 3) 
Traceback (most recent call last): 
    .... 
    File "D:\Program Files\Python35\lib\site-packages\tensorflow\python\framework\tensor_util.py", line 424, in make_tensor_proto 
    (shape_size, nparray.size)) 
ValueError: Too many elements provided. Needed at most -1109917696, but received 1 
,536,913 63,210

모델 요약 : 고급의

_________________________________________________________________ 
Layer (type)     Output Shape    Param # 
================================================================= 
conv3d_1 (Conv3D)   (None, 5, 48, 48, 40)  60040  
_________________________________________________________________ 
activation_1 (Activation) (None, 5, 48, 48, 40)  0   
_________________________________________________________________ 
conv3d_2 (Conv3D)   (None, 5, 48, 48, 40)  43240  
_________________________________________________________________ 
flatten_1 (Flatten)   (None, 460800)   0   
_________________________________________________________________ 
dropout_1 (Dropout)   (None, 460800)   0   
_________________________________________________________________ 
dense_1 (Dense)    (None, 6912)    -110991078 
_________________________________________________________________ 
reshape_1 (Reshape)   (None, 48, 48, 3)   0   
================================================================= 

감사합니다.

+0

conv2D의 경우'padding = 'same ''을 사용하는 것을 잊었을 것입니다. (3,3) 커널을 사용하면 2 픽셀을 버립니다. ---- 이제,'categorical_crossentropy'를 사용하는 것을 제외하고는, 당신의 코드에 어떤 문제도 보지 못했습니다. 당신은 단지 분류 문제에서 그것을 사용합니다, 나는 당신이'mse'를 시도 할 것을 제안합니다. –

+0

'model.summary()'의 결과는 무엇입니까? –

+0

모델 요약으로 업데이트했습니다. 흥미로운 숫자 인'-110991078'을 찾았습니다. conv2D에 관해서는 네가 옳다. 나는 '패딩 ='동일 '하지 않았다. 나는 또한'mse'을 시도 할 것입니다 –

답변

0

Conv2D의 경우 padding = 'same'을 사용하는 것을 잊었을 수 있습니다. A (3,3) 커널은 각 차원에서 2 개의 픽셀을 제거합니다.

그리고 Dense 레이어에 표시된 음수의 매개 변수에 의해 지원되는 것보다 큰 모델이 있다고 생각합니다.

아마도 단일 레이어에 대한 매개 변수의 최대 한도가 있습니다. 이 경우 콘볼 루션의 필터 수를 줄이거 나 평평한 레이어 앞에 채널을 합칩니다.

관련 문제