我正在喀拉拉邦建立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]
答案 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]))