【问题标题】:Error with Input shape in keraskeras中的输入形状错误
【发布时间】:2023-03-28 12:50:02
【问题描述】:

我正在使用 Keras 构建一个 CNN,我有以下代码 sn-p:

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: Input 0 is in compatible with layer conv1d_1: expected ndim=3, found ndim=2

数据集的形状是:

请帮我解决一下情况!

谢谢

【问题讨论】:

  • 请不要在 Stack Overflow 中发布代码截图 - 只需发布错误本身。

标签: python machine-learning conv-neural-network


【解决方案1】:

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

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

然后你需要相应地重塑你的输入。 它应该是形状(batchsize、num_features、channels)

所以假设你的 X 是一个 numpy 数组

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

【讨论】:

  • 我收到一个新错误> ValueError: 检查目标时出错:预期dense_5 有2 维,但得到的数组形状为(30730, 1, 1)
  • 有人可以帮我解决这个问题吗?
【解决方案2】:

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

  1. 输入形状不一致: 该错误表明您的模型需要输入dim=3,但您将其传递给dim=2。 这是真的,因为cov1d 层期望得到一个 3d 张量(#samples、#steps、#features)。你的训练数据有shape=(30730,50) 所以#samples=30730,#steps=50#features=1。 #samples 是隐式传递的(它是在运行时确定的)所以,修复这些行:

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

    到:

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

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

    trainX = X[:30730].reshape(-1, 50, 1)
    
  2. 输出形状不一致:您的模型是使用 loss=categorical_crossentropy 训练的。使用这种损失进行训练意味着您应该对您的 trainY 数据进行一次热编码。因此,如果您有 x 个类,则 trainY 中的每个样本都需要转换为带有 length=x 的数组。但是,在您的情况下,模型输出单个输出: model.add(Dense(1, activation='softmax')) 所以你应该使用 loss=binary_crossentropy 来处理 `loss=mse' 的分类问题,例如回归问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-15
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2021-05-20
    • 2021-06-20
    • 2020-04-29
    相关资源
    最近更新 更多