Keras LSTM的输入数据

时间:2018-01-09 00:49:20

标签: python keras lstm

我学习Keras LSTM - 现在尝试了解数据输入形状和准备。对于我的例子 - 我想要用1000个int序列学习LSTM。每个序列的长度为5.如果第一个元素为1,则Y为1,否则为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

0 个答案:

没有答案