前提
機械学習初心者なのですが、画像認識のでモデルを作成しています。グレースケール画像をRGBとして学習していたため修正した(image.convert("RGB") → image.convert("L") とした。)ところエラーが発生しました。
勉強不足で申し訳ないのですが、解決策を教えていただけないでしょうか。
発生している問題・エラーメッセージ
ValueError: Input 0 is incompatible with layer conv2d_1: expected ndim=4, found ndim=3 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ValueError Traceback (most recent call last) <ipython-input-8-759cf791ad93> in <module> 43 model=Sequential() 44 ---> 45 model.add(Conv2D(32,(3,3),padding='same',input_shape=X_train.shape[1:])) 46 model.add(Activation('relu')) 47 model.add(Conv2D(32,(3,3),padding='same'))
該当のソースコード
python
1model=Sequential() 2 3model.add(Conv2D(32,(3,3),padding='same',input_shape=X_train.shape[1:])) 4model.add(Activation('relu')) 5model.add(Conv2D(32,(3,3),padding='same')) 6model.add(Activation('relu')) 7model.add(MaxPooling2D(pool_size=(2,2))) 8model.add(Dropout(0.5)) 9 10model.add(Conv2D(64,(3,3),padding='same')) 11model.add(Activation('relu')) 12model.add(Conv2D(64,(3,3),padding='same')) 13model.add(Activation('relu')) 14model.add(MaxPooling2D(pool_size=(2,2))) 15model.add(Dropout(0.5)) 16 17model.add(Flatten()) 18model.add(Dense(512)) 19model.add(Activation('relu')) 20model.add(Dropout(0.5)) 21model.add(Dense(4)) 22model.add(Activation('softmax')) 23 24model.compile(loss='categorical_crossentropy',optimizer='SGD',metrics=['accuracy']) 25 26BATCH_SIZE = 12 27# 20エポック回せば十分 28NUM_EPOCH = 30 29#train 30histrory=model.fit(X_train,y_train,batch_size=BATCH_SIZE,epochs=NUM_EPOCH) 31 32# 33score=model.evaluate(X_test,y_test)
試したこと
エラーをみてinput.shapeとしているX_train.shapeの形を調べたところこのようになりました。
convert("RGB")の場合
X_train.shape = (1075, 128, 128, 3)
X_train.shape[1:] = (128, 128, 3)
convert("L")の場合
X_train.shape = (1075, 128, 128)
X_train.shape[1:] = (128, 128)
確かに次元が異なるのは分かったのですが実際にコードでどこを修正すべきかがわかりませんでした。

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2020/01/13 13:24