【问题标题】:Keras: ValueError: Input 0 is incompatible layer issues [duplicate]Keras:ValueError:输入0是不兼容的层问题[重复]
【发布时间】:2017-07-09 05:14:33
【问题描述】:

我使用带有 Tensorflow 的 Keras 作为后端,但出现不兼容的错误:

model = Sequential()
model.add(LSTM(64, input_dim = 1))
model.add(Dropout(0.2))
model.add(LSTM(16))

以下错误显示:

Traceback (most recent call last):
  File "train_lstm_model.py", line 36, in <module>
    model.add(LSTM(16))
  File "/home/***/anaconda2/lib/python2.7/site-packages/keras/models.py", line 332, in add
    output_tensor = layer(self.outputs[0])
  File "/home/***/anaconda2/lib/python2.7/site-packages/keras/engine/topology.py", line 529, in __call__
    self.assert_input_compatibility(x)
  File "/home/***/anaconda2/lib/python2.7/site-packages/keras/engine/topology.py", line 469, in assert_input_compatibility
    str(K.ndim(x)))
ValueError: Input 0 is incompatible with layer lstm_2: expected ndim=3, found ndim=2

我该如何解决这个问题?

Keras 版本:1.2.2 张量流版本:0.12

【问题讨论】:

    标签: python linux tensorflow keras keras-layer


    【解决方案1】:

    LSTM 层正在接受(len_of_sequences, nb_of_features) 形状的输入。您提供的输入形状仅为1-dim,因此这是错误的来源。错误消息的确切形式来自数据的实际形状包括batch_size。所以馈送到层的数据的实际形状是(batch_size, len_of_sequences, nb_of_features)。您的形状是 (batch_size, 1),这就是 3d2d 输入背后的原因。

    此外 - 您可能在第二层遇到类似的问题。为了使您的LSTM 层返回一个序列,您应该将其定义更改为:

    model.add(LSTM(64, input_shape = (len_of_seq, nb_of_features), return_sequences=True)
    

    或:

    model.add(LSTM(64, input_dim = nb_of_features, input_len = len_of_sequence, return_sequences=True)
    

    【讨论】:

    • 我已经验证了它仅通过单独设置input_dim 来工作,条件是将return_sequences 设置为True。你能告诉我为什么我必须设置return_sequences吗?
    • 您应该将 return_srquences 设置为 True 每次将输出馈送到循环网络时。它使您的层输出整个计算序列。如果设置为 false,则返回一维向量(默认设置为序列的最后一个输出)。
    • 我的答案是对还是错?
    猜你喜欢
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 2020-10-25
    • 2021-07-04
    • 2020-11-28
    • 2021-05-31
    相关资源
    最近更新 更多