Python 如何使用LSTM生成序列?

Python 如何使用LSTM生成序列?,python,keras,lstm,recurrent-neural-network,Python,Keras,Lstm,Recurrent Neural Network,我想在激活特定输入时生成一个序列。我想根据其相应的输入神经元激活生成奇偶序列。我正在尝试使用LSTM创建一个模型,因为它可以记住短期订单 我试过这样做 import numpy as np from keras.models import Sequential from keras.layers import Dense,LSTM X=np.array([[1,0], [0,1]]) Y=np.array([[1,3,5,7,9], [2,4

我想在激活特定输入时生成一个序列。我想根据其相应的输入神经元激活生成奇偶序列。我正在尝试使用LSTM创建一个模型,因为它可以记住短期订单

我试过这样做

import numpy as np
from keras.models import Sequential
from keras.layers import Dense,LSTM


X=np.array([[1,0],
            [0,1]])

Y=np.array([[1,3,5,7,9],
            [2,4,6,8,10]])

model = Sequential()
model.add(Dense(10, input_shape=(2))
model.add(LSTM(5, return_sequences=True))
model.add(LSTM(5, return_sequences=False))
model.add(Dense(5))
model.compile(loss='mse', optimizer='adam')

model.fit(X,Y)
但当我试图拟合模型时,它给了我这个错误

NameError:未定义名称“model”

更改
模型。添加(稠密(10,输入_形状=(2))

model.add(Dense(10, input_shape=(2,)))

model.add(Dense(5)) # Remove this 
注:以下两种代码是等效的:

model = Sequential()
model.add(Dense(32, input_shape=(2,)))

model = Sequential()
model.add(Dense(32, input_dim=2))

要在Keras中使用RNN,您需要在数据中引入一个额外的维度:时间步。在您的情况下,您希望有5个时间步。因为您希望输入和输出数据之间有一对多的关系,所以您需要将输入数据复制5次。最后一个
LSTM
层也必须设置为返回序列,因为您希望每个时间步都有一个结果,而不仅仅是最后一个。要使
密集
层了解时间维度,您需要使用
时间分布
层对其进行包装。最后一个密集层只有一个输出,因为它将为每个时间步只输出一个结果

import numpy as np
from keras.models import Sequential
from keras.layers import Dense,LSTM
from keras.layers.wrappers import TimeDistributed

X=np.array([[[1, 0],
        [1, 0],
        [1, 0],
        [1, 0],
        [1, 0]],

       [[0, 1],
        [0, 1],
        [0, 1],
        [0, 1],
        [0, 1]]])


Y=np.array([[[ 1],
        [ 3],
        [ 5],
        [ 7],
        [ 9]],

       [[ 2],
        [ 4],
        [ 6],
        [ 8],
        [10]]])


model = Sequential()
model.add(TimeDistributed(Dense(10), input_shape=(5, 2)))
model.add(LSTM(5, return_sequences=True))
model.add(LSTM(5, return_sequences=True))
model.add(TimeDistributed(Dense(1)))
model.compile(loss='mse', optimizer='adam')

model.fit(X,Y, nb_epoch=4000)

model.predict(X)
在大约4000个时代之后,我得到了以下结果:

Epoch 4000/4000
2/2 [==============================] - 0s - loss: 0.0032
Out[20]:
array([[[ 1.02318883],
        [ 2.96530271],
        [ 5.03490496],
        [ 6.99484348],
        [ 9.00506973]],

       [[ 2.05096436],
        [ 3.96090508],
        [ 5.98824072],
        [ 8.0701828 ],
        [ 9.85805798]]], dtype=float32)

感谢您的回复,有没有更好的方法来预测下一个序列
[[11,13,15,17,19],[12,14,16,18,20]
而无需使用此序列进行培训