Python keras中的输入形状错误

Python keras中的输入形状错误,python,machine-learning,conv-neural-network,Python,Machine Learning,Conv Neural Network,我正在使用Keras构建CNN,我有以下代码片段: model = Sequential() model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(50,))) model.add(Conv1D(filters=64, kernel_size=3, activation='relu')) model.add(Dropout(0.5)) model.add(MaxPooling1D(pool_size

我正在使用Keras构建CNN,我有以下代码片段:

model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(50,)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
#model.add(Dense(20, activation='relu'))
model.add(Dense(1, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(trainX, trainY, epochs=10, batch_size=32, verbose=0)
运行此操作后,我遇到以下错误:

ValueError:输入0与层conv1d_1不兼容:预期ndim=3,发现ndim=2

数据集的形状为:

请帮我解决这个问题


谢谢

Conv层希望您的输入是图像类型。因此,需要指定/重塑以包含通道尺寸。 在您的情况下,您的频道数为1

model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(50,1, )))
然后,您还需要相应地重塑输入。 其形状应为batchsize、num_特征和通道

假设X是一个numpy数组

trainX = X[:30730].reshape(-1, 50, 1)

您发布的代码有两个主要问题:

输入形状不一致: 错误表示您的模型期望输入dim=3,但您传递它dim=2。 这是事实,因为cov1d层希望获得3d张量样本、步骤和特征。训练数据的形状为30730,50,因此样本为30730,步骤为50,特征为1。示例是隐式传递的,它是在运行时确定的,因此,请修复这些行:

model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(50,)))
致:

此外,您应该通过添加维度来相应地重新塑造培训数据:

trainX = X[:30730].reshape(-1, 50, 1)
输出形状不一致:您的模型使用损失=分类熵进行训练。这种丢失的训练意味着您应该对训练数据进行热编码。因此,如果您有x个类,则需要将trainY中的每个样本转换为长度=x的数组。但是,在您的情况下,模型输出单个输出: model.addDense1,activation='softmax',因此对于'loss=mse'的分类问题,您应该使用loss=binary\u交叉熵,例如,对于回归问题


我得到一个新错误>ValueError:检查目标时出错:预期密集_5有2维,但得到了形状为30730、1、1的数组。有人能帮我解决这个问题吗?请不要在堆栈溢出中发布代码截图-只发布错误本身。
trainX = X[:30730].reshape(-1, 50, 1)