LSTM input_shape不兼容

时间:2019-01-15 21:38:54

标签: python-3.x tensorflow keras

我正在尝试使用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)

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

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模型准备了数据集,但是您可以适当地使用它。