web-dev-qa-db-ja.com

Keras ValueError:入力0はレイヤーconv2d_1と互換性がありません:期待されるndim = 4、ndim = 5が見つかりました

すべてのソリューションを確認しましたが、それでも同じエラーに直面しています。私のトレーニング画像の形状は(26721、32、32、1)で、これは4次元だと思いますが、エラーが5次元であることを示す理由がわかりません。

_ model = Sequential()

 model.add(Convolution2D(16, 5, 5, border_mode='same',
                            input_shape= input_shape ))
_

だからこれは私がmodel.fit_generatorを定義する方法です

model.fit_generator(train_dataset, train_labels, nb_Epoch=epochs, verbose=1,validation_data=(valid_dataset, valid_labels), nb_val_samples=valid_dataset.shape[0],callbacks=model_callbacks)

誰でもこれを手伝ってくれますか?

12
Lucky

問題は_input_shape_です。

実際には3つのディメンションのみが含まれている必要があります。また、内部的にkerasはバッチディメンションを追加して4にします。

おそらく_input_shape_を4次元(バッチを含む)で使用したため、kerasは5番目を追加しています。

input_shape=(32,32,1)を使用する必要があります。

23
Daniel Möller

ここでは、CNNが2dとして使用されるたびに"channels_first"を確認する必要があります。また、train_dataとテストデータを次のように変更します。

if K.image_data_format() == 'channels_first':   #check for channels_first
 train_img.reshape(train_img.shape[0],1,x,x)
 Input_shape=(1,x,x)                            #In your case x is 32
else:
 train_img.reshape(train_img.shape[0],x,x,1)
 Input_shape=(x,x,1)
0
dgamer

問題は_input_shape_にあります。グレースケールイメージで作業していることをkerasに知らせるために、余分なディメンション/チャネルを追加してみてください。つまり、-> _1_

input_shape= (56,56,1)。おそらく、通常のディープラーニングモデルを使用している場合、問題は発生しませんが、Convnetでは発生します。

0
SANDEEP KUMAR H