将图像拟合到张量流Keras的Conv2D层中时出错

时间:2018-12-28 11:27:31

标签: python numpy tensorflow keras

我正在喀拉拉邦建立CNN,无法输入我的数据。

我的图像的形状为(-1、40、52、1)。我尝试通过inputLayer层(也需要4个尺寸)来拟合它们,但最终为我的conv层提供了5D输入。

...
train_images.reshape(-1, 40, 52, 1)
test_images.reshape(-1, 40, 52, 1)

#Model
num_classes = 10
model = keras.Sequential()

model.add(keras.layers.InputLayer(input_shape=[1,40,52,1]))
model.add(keras.layers.Conv2D(filters = 32, kernel_size=5, strides=1, padding ='same', activation='relu'))
model.add(keras.layers.MaxPooling2D(pool_size=5, padding='same'))

model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(512, activation='relu'))
model.add(keras.layers.Dense(num_classes, activation='softmax'))
model.summary()


#Compile model
model.compile(optimizer=tf.train.AdamOptimizer(0.001),
          loss='categorical_crossentropy',
          metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=10, validation_data= 
(test_images, test_labels), verbose=1)

我正在寻找一种适合图像的方法。但是当我运行它时,我得到了错误:

ValueError:conv2d层的输入0与该层不兼容:预期ndim = 4,找到的ndim = 5。收到完整的图形:[无,1、40、52、1]

2 个答案:

答案 0 :(得分:1)

您无需添加batch_size

model.add(keras.layers.InputLayer(input_shape=[40,52,1]))

答案 1 :(得分:0)

谢谢您的反馈,但是我选择了另一种方法。

将一维数组分成2个,并制成2D“图像”,如下所示:

[[1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]]

代替:

[1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]

这从

重塑了我的数据库
  

-1、40、52、1

收件人:

  

-1、2、26、1

所以我然后固定了输入层: model.add(keras.layers.InputLayer(input_shape=[2,26,1]))