我学习了Keras LSTM - 现在尝试了解数据输入形状和准备 . 对于我的例子 - 我想要用1000个int序列学习LSTM . 每个序列的长度是5.如果第一个元素是1,那么Y是1,否则0是0 . 输入序列 - > 1 0 0 0 0,输出1,输入序列0 0 0 0 0输出0.开头非常简单 .

我准备数据 - 1000个样本,5个步骤,1个特征

x_train = np.zeros((1000, 5, 1), dtype=np.int32)
x_train[0:500, 0, 0] = 1

x_test = np.zeros((300, 5, 1), dtype=np.int32)
x_test[0:150, 0, 0] = 1

y_train = np.zeros((1000, 1), dtype=np.int32)
y_train[0:500, 0] = 1

y_test = np.zeros((300, 1), dtype=np.int32)
y_test[0:150, 0] = 1

并创建了模型

model = Sequential()
model.add(LSTM(10, input_shape=(5, 1), return_sequences=False, stateful=False))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=1000)
score, acc = model.evaluate(x_test, y_test, batch_size=300, verbose=0)

并运行

Epoch 1/10
1000/1000 [==============================] - 0s - loss: 0.6790 - acc: 1.0000
Epoch 2/10
1000/1000 [==============================] - 0s - loss: 0.6786 - acc: 1.0000
Epoch 3/10
1000/1000 [==============================] - 0s - loss: 0.6782 - acc: 1.0000
Epoch 4/10
1000/1000 [==============================] - 0s - loss: 0.6778 - acc: 1.0000
Epoch 5/10
1000/1000 [==============================] - 0s - loss: 0.6774 - acc: 1.0000
Epoch 6/10
1000/1000 [==============================] - 0s - loss: 0.6770 - acc: 1.0000
Epoch 7/10
1000/1000 [==============================] - 0s - loss: 0.6766 - acc: 1.0000
Epoch 8/10
1000/1000 [==============================] - 0s - loss: 0.6762 - acc: 1.0000
Epoch 9/10
1000/1000 [==============================] - 0s - loss: 0.6757 - acc: 1.0000
Epoch 10/10
1000/1000 [==============================] - 0s - loss: 0.6753 - acc: 1.0000

我有感觉我做错了或X或Y数据 . 请仔细查看代码和输出 - 我试着按照文档 - 输入张量形状为[样本,时间步长,功能]

所以我有1000个样本,5个时间步长,1个特征 - 对吗?

Y日期只有1000个样本和1个数据 - 所以1000x1矩阵 .

如果在数据准备方面存在一些误解,请提供建议 .

如果数据正常,我会继续使用有状态LSTM)