【问题标题】:Keras expected dense_13 to have 2 dimensionsKeras 期望 dense_13 有 2 个维度
【发布时间】:2019-02-09 06:28:34
【问题描述】:

我从 Keras 收到非常混乱的错误消息。我使用以下模型并将输入与形状 (num_examples, n, 1) 传递给它。

def create_model():
    model = Sequential()
    model.add(LSTM(64, input_shape=(n,1), return_sequences=False))
    model.add(Dense(units=n, activation='linear'))
    return model

我收到以下错误消息: ValueError: Error when checking target: expected dense_16 to have 2 dimensions, but got array with shape (11030, 50, 1).

但这怎么可能呢?如果我使用model.summary(),则表明LSTM 输出具有这种形状:(None, 64)。那么它如何将形状为(11030, 50, 1) 的数组传递给密集层呢?

此外,如果我尝试在 LSTM 和 Dense 之间添加 model.add(Flatten()),我会收到此错误:ValueError: Input 0 is incompatible with layer flatten_3: expected min_ndim=3, found ndim=2

那么,它将 2D 传递给 Flatten,但它怎么可能将 3D 传递给 Dense?

【问题讨论】:

  • 试试input_shape=(None,n) 关于flatten,需要return_sequencestrue
  • 我都试过了:它仍然给出同样的错误。出于某种原因,形状 (11030, 50, 1) 的输入似乎直接进入 Dense。而形状 (None, 64) 的 LSTM 输出应该去那里。

标签: python keras lstm


【解决方案1】:

问题不在于您的模型,而在于 目标,即您提供的 y 标签。您的模型不匹配,因为您的模型输出 (batch_size, n) 而您提供的是 (batch_size, 50, 1)

假设n=50 那么你需要将你的目标标签压缩到二维并删除那个1。y_train = y_train.squeeze() 应该解决形状不匹配的问题。

【讨论】:

  • 哦,确实,你是对的!它是自动编码器,所以我将 X_train 传递给输入和目标。没有意识到它们必须是不同的形状!
【解决方案2】:

这可能会有所帮助

import numpy as np
input_array = np.array(input_array).reshape(dim1, dim2)

dim1,dim2 表示您需要的尺寸大小。

【讨论】:

  • 我知道如何重塑它。问题是: 1. 如果我将它重塑为 2D,那么它将不适合 LSTM 层(需要 3D)。 2. 3D 数据甚至不应该到达 Dense 层,我不明白为什么会这样(因为 LSTM 输出形状是 (None, 64),所以它不是 3D)。
猜你喜欢
  • 2022-01-12
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 2021-08-31
  • 2018-02-06
  • 2022-06-13
相关资源
最近更新 更多