2017-05-12 5 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 

モデルの要約:

_________________________________________________________________ 
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に関してあなたは正しいです。私は 'padding = 'same''を持っていませんでした。私も 'mse'を試してみます –

答えて

0

Conv2Dのケースでは、padding = 'same'を忘れている可能性があります。 (3,3)カーネルは各次元で2つのピクセルを削除します。

Denseレイヤーに表示されている負の数のパラメータによって、サポートされているモデルよりも大きなモデルが得られたと思います。

多分、単一レイヤのパラメータの上限があります。その場合は、畳み込みのフィルタ数を減らすか、平坦化レイヤの前にチャンネルを合計します。

関連する問題