gpt4 book ai didi

python - 一对一 LSTM

转载 作者:太空宇宙 更新时间:2023-11-03 16:17:47 27 4
gpt4 key购买 nike

我有一个长度为 1000 的数字序列,我将其分成 100 个长度的序列。所以我最终得到了 901 个长度为 100 的序列。让前 900 个序列为 trainXtrainY 是这些序列中的第 2 个到第 901 个。

在 keras 中,我希望构建如下图所示的模型:enter image description here重要的特征是 $X_1$ 映射到 $X_2$,$X_2$ 映射到 $X_3$ 等等。请忽略我还没有绘制 100 个单位的事实。

在 keras 中,我知道如何构建模型,其中 $X_1$ 到 $X_{100}$ 映射到 $X_{101}$(多对一情况)。这是通过以下方式完成的:

batch_size = 1
time_steps = 100
model = Sequential()
model.add(LSTM(32, batch_input_shape=(batch_size, time_steps, 1), stateful=True))
model.add(Dense(1))

但是,在多对多情况下,以下内容会出错:

model = Sequential()
model.add(LSTM(32, batch_input_shape=(batch_size, time_steps, 1), stateful=True, return_sequences=True))
model.add(Dense(1))

我尝试保留通过说 return_sequences=True 给出 100 个输出的事实。我收到错误 Input 0 is incomplete with layer dendense_6: Expected ndim=2,found ndim=3,我想这是可以理解的,因为 Dense 仅需要 batch_size xhidden_​​nodes 大小矩阵作为输入,而在我的例子中,它输出 batch_size x time_steps xhidden_​​nodes

所以我的问题是如何获得如图所示行为的 LSTM。重要的是,在密集层中,我不会意外地引用当前时间步前面(或后面)的隐藏层。

最佳答案

您不需要多个输出。训练您的模型来预测序列中的下一个数字。然后,使用预测的数字并将其输入经过训练的模型并预测下一个数字并重复此任务。换句话说:

准备训练数据:

X_train = np.zeros((901, 100))
y_train = np.zeros((901, 1))
for i in range(901)
x_train[i,:] = x[i:i+100]
y_train[i,0] = x[i+101]

训练你的模型:

for iteration in range(10000):
model.fit(x_train, y_train, batch_size = 40, nb_epoch = 2)

现在,如果您想预测以以下开头的接下来 10 个数字:x[t: t+101]

您需要做的是:

    x_input = np.zeros((1, 100))
x_input[0, :] = x[t+i: t+i+101]
for i in range(10)
y_output = model.predict(x_input)
print(y_output)
x_input[0, 0:100] = x[t+i+1: t+i+100]
x_input[100] = y_output

在此示例中我使用了batch_size = 40。但是,你可以使用任何东西(但我不推荐 1!;))

关于python - 一对一 LSTM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38783981/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com