【问题标题】:LSTM input_shape incompatibleLSTM input_shape 不兼容
【发布时间】:2019-06-09 23:01:26
【问题描述】:

我正在尝试使用 Keras 构建一个顺序模型,并将 LSTM 层作为第一层。 train_x 的形状为 (21000, 2),我使用的批量大小为 10

当我尝试时

 model = Sequential()
 model.add(LSTM(128, activation='relu', input_shape=(
        train_x.shape[1:]), return_sequences=True))

我收到一个错误提示

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

然后我尝试更改 input_shape 并将其设置为 input_shape=(train_x.shape) 并收到另一个错误提示

检查输入时出错:预期 lstm_1_input 有 3 个维度,但得到的数组形状为 (21000, 2)

我做错了什么?

【问题讨论】:

  • ninesalt,请检查 sol 现在我更新了,对我造成的混乱表示抱歉。
  • 您需要清楚地了解您的数据是什么。您认为“序列”是什么,数据的每个维度意味着什么,您想从中提取什么。没有这个,就不可能提供帮助。
  • @danielmoller 输入数据只是一个带有数字的 (N, 2) 数据框。我不确定这是否是您所说的序列
  • 嗯……仅仅一个数据框是不足以决定如何将数据用到LSTM中的,你必须有“例子”、“时间步长”和“特征”。这就是为什么您需要“理解”数据并了解要提取的内容。

标签: python-3.x tensorflow keras


【解决方案1】:

Keras LSTM 层期望输入为3 暗淡为(batch_size, seq_length, input_dims),但您分配错误。试试这个

input_dims = train_x.shape[1]
seq_length = #decide an integer
model = Sequential()
 model.add(LSTM(128, activation='relu', input_shape=(seq_length, input_dims), return_sequences=True))

您还需要将数据重塑为三个暗淡,其中新的暗淡将代表序列,如

我用玩具数据集来展示一个例子,这里的数据和标签最初的形状是((150, 4), (150,)),使用以下脚本:

seq_length = 10
dataX = []
dataY = []
for i in range(0, 150 - seq_length, 1):
    dataX.append(data[i:i+seq_length])
    dataY.append(labels[i+seq_length-1])
import numpy as np
dataX = np.reshape(dataX, (-1, seq_length, 4))
dataY = np.reshape(dataY, (-1, 1))
# dataX.shape, dataY.shape

输出:((140, 10, 4), (140, 1))

现在您可以安全地将其喂给模型了。

注意:我为many-to-one模型准备了数据集,但你可以适当地使用它。

【讨论】:

  • 更准确地说,RNN 层期望输入是 3 维的:github.com/keras-team/keras/blob/master/keras/layers/…
  • seq 长度必须是元组吗?你有 10 条评论。
  • 第三,我们不用指定,训练时会填上batch_size
  • 不,它不是元组,我只是写它。为整数,可自行选择。
  • 您的代码不适合我。 Error converting shape to a TensorShape: int() argument must be a string, a bytes-like object or a number, not 'tuple'
猜你喜欢
  • 2020-01-22
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多