python - 检查输入 : expected conv2d_1_input to have shape (50, 50, 1) 时出错,但得到形状为 (50, 50, 3) 的数组

标签 python keras

enter code here



      classifier = Sequential()


      classifier.add(Convolution2D(32, kernel_size=3, input_shape = (50, 50 , 1), activation =             
      'relu'))


      classifier.add(MaxPooling2D(pool_size = (2, 2)))


      classifier.add(Convolution2D(32, kernel_size=3, activation = 'relu'))
      classifier.add(MaxPooling2D(pool_size = (2, 2)))

      classifier.add(Dropout(0.35))
      classifier.add(Flatten())


      classifier.add(Dense(output_dim = 128, activation = 'relu'))
      classifier.add(Dropout(0.04))
      classifier.add(Dense(1, activation = 'sigmoid'))


      classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])



       from keras.preprocessing.image import ImageDataGenerator

       train_datagen = ImageDataGenerator(rescale = 1./255,
                               shear_range = 0.2,
                               zoom_range = 0.2,
                               horizontal_flip = True)

       validation_datagen = ImageDataGenerator(rescale = 1./255)

        training_set = train_datagen.flow_from_directory('/...',
                                             target_size = (50, 50),
                                             batch_size = 32,
                                             class_mode = 'binary')


         validation_set = validation_datagen.flow_from_directory('/…..',
                                        target_size = (50, 50),
                                        batch_size = 32,
                                        class_mode = 'binary')


           history=classifier.fit_generator(training_set,
                     samples_per_epoch = 5187,
                     nb_epoch = 25,
                     validation_data = validation_set,
                     nb_val_samples = 1287)

这是我制作的简单的 cnn 架构。我使用的图像是灰度图像。

如果我将 channel 值指定为粗体指定的 1 classifier.add(Convolution2D(32, kernel_size=3, input_shape = (50, 50 , 1),activation = 'relu'))

我收到错误

检查输入时出错:预期 conv2d_1_input 的形状为 (50, 50, 1),但得到的数组形状为 (50, 50, 3)

但是如果我使用过滤器大小为 3,我不会收到任何错误,但这可能是对灰度图像使用 3 channel 的逻辑错误...请澄清这一点

最佳答案

flow_from_directory 采用 color_mode 参数来指定加载图像的 channel 数。如果要使用灰度图像,则需要指定它(默认为'rgb'):

train_datagen.flow_from_directory('/...',
                                  color_mode='grayscale', #<<<<<<<<<<<<<<<<<<<<<
                                  target_size = (50, 50),
                                  batch_size = 32,
                                  class_mode = 'binary')

关于python - 检查输入 : expected conv2d_1_input to have shape (50, 50, 1) 时出错,但得到形状为 (50, 50, 3) 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58300973/

相关文章:

python - 检查目标时出错 : Converting FC layers to Conv2D

python - 在 keras 的 LSTM 中使用隐藏状态而不是输出

python - 如何在 CNN block 上应用 TimeDistributed 层?

python - 在 Python 中复制流

python - 安装报错easy_install python

python - 将字符串返回到 SWIG python 接口(interface)的最佳方法是什么?

python - 无法用conda卸载keras

python - 在 pyspark 中使用带有 dropout 的 Keras 序列化模型

python - 什么是 Mac OS X 上 Python 的好 IDE?

python - 在 Django 中将固定装置加载到数据库后如何延迟评估 ORM 调用?