首页 > 解决方案 > ValueError:检查输入时出错:预期 conv2d_1_input 的形状为 (128, 75, 1) 但得到的数组的形状为 (1, 128, 1)

问题描述

我正在将 melspectogram 加载到 cnn。这些是模型的代码和数据的形状。但我仍然收到这些错误

from keras import layers
from keras import models

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',
                        input_shape=(128, 75, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(10, activation='sigmoid'))
model.summary()

数据的形状

print(train_set_m.shape)
print(train_classes_m_hot.shape)
print(test_set_m.shape)
print(test_classes_m_hot.shape)

(75, 1, 128, 1) (75, 1, 10, 1) (25, 1, 128, 1) (25, 1, 10, 1)

These is the code I am fiting my model
# Deep Learning Parameters
batch_size = 5 # Number of samples per gradient update.
epochs = 200    # An epoch is an iteration over the entire x and y data provided.

# Train Model
hist = model.fit(train_set_m, train_classes_m_hot, verbose=1, 
                    batch_size=batch_size, epochs=epochs, validation_data=(test_set_m,test_classes_m_hot))

我有 10 个要预测的课程

这些是错误

ValueError: Error when checking input: expected conv2d_1_input to have shape (128, 75, 1) but got array with shape (1, 128, 1)

标签: python

解决方案


使用 model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(1, 128, 1)))

无论如何,您的数据似乎是一维的:您只有一个重要维度,大小为 128,其他都是虚拟的(大小 1)。所以一个更好的主意是用真正的一维重新格式化你的数据,然后使用一维卷积。


推荐阅读