小编典典

了解 Keras LSTM

all

我试图调和我对 LSTM 的理解,并在Christopher
Olah
在 Keras
中实现的这篇文章中指出。我正在关注Jason Brownlee为 Keras
教程编写的博客。我主要困惑的是,

  1. 将数据系列重塑为[samples, time steps, features]和,
  2. 有状态的 LSTM

让我们参考下面粘贴的代码专注于上述两个问题:

# reshape into X=t and Y=t+1
look_back = 3
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)

# reshape input to be [samples, time steps, features]
trainX = numpy.reshape(trainX, (trainX.shape[0], look_back, 1))
testX = numpy.reshape(testX, (testX.shape[0], look_back, 1))
########################
# The IMPORTANT BIT
##########################
# create and fit the LSTM network
batch_size = 1
model = Sequential()
model.add(LSTM(4, batch_input_shape=(batch_size, look_back, 1), stateful=True))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
for i in range(100):
    model.fit(trainX, trainY, nb_epoch=1, batch_size=batch_size, verbose=2, shuffle=False)
    model.reset_states()

注意:create_dataset 接受一个长度为 N 的序列并返回一个N-look_back数组,其中每个元素都是一个look_back长度序列。

什么是时间步长和特征?

可以看出 TrainX 是一个 3-D 数组,其中 Time_steps 和 Feature 分别是最后两个维度(在此特定代码中为 3 和
1)。对于下图,这是否意味着我们正在考虑many to one粉红色框数为 3 的情况?或者它的字面意思是链长为 3(即只考虑 3
个绿色框)。在此处输入图像描述

当我们考虑多元序列时,特征参数是否变得相关?例如同时模拟两只金融股?

有状态的 LSTM

有状态 LSTM
是否意味着我们在批次运行之间保存单元记忆值?如果是这种情况,batch_size就是一个,并且内存在训练运行之间被重置,那么说它是有状态的有什么意义。我猜这与训练数据没有被打乱的事实有关,但我不确定如何。

有什么想法吗?图片参考: http: //karpathy.github.io/2015/05/21/rnn-
effectiveness/

编辑1:

对@van 关于红色和绿色框相等的评论有点困惑。所以只是为了确认一下,以下 API
调用是否对应于展开的图表?特别注意第二张图(batch_size是任意选择的。):
在此处输入图像描述
在此处输入图像描述

编辑2:

对于已经完成了 Udacity 的深度学习课程并且仍然对 time_step 参数感到困惑的人,请查看以下讨论:https
://discussions.udacity.com/t/rnn-lstm-use-
implementation/163169

更新:

事实证明这model.add(TimeDistributed(Dense(vocab_len)))就是我要找的。这是一个例子:https
://github.com/sachinruk/ShakespeareBot


阅读 94

收藏
2022-03-24

共1个答案

小编典典

首先,您选择很棒的教程(1、2 开始。

什么时间步意味着Time-steps==3在 X.shape(描述数据形状)中意味着有三个粉红色的框。由于在 Keras
中每一步都需要输入,因此绿色框的数量通常应该等于红色框的数量。除非你破解结构。

多对多 vs. 多对一return_sequences:在 keras
中,初始化LSTMorGRU或时有一个参数SimpleRNN。什么时候return_sequencesFalse(默认情况下),那么它是
多对一的 ,如图所示。它的返回形状是(batch_size, hidden_unit_length),代表最后一个状态。什么时候return_sequencesTrue,那么就是 多对多
。它的返回形状是(batch_size, time_step, hidden_unit_length)

特征参数是否变得相关 :特征参数表示 “你的红框有多大” 或每一步的输入维度是多少。如果您想从 8
种市场信息中进行预测,那么您可以使用feature==8.

有状态
:您可以查找源代码。初始化状态时,如果stateful==True,则将上次训练的状态作为初始状态,否则将生成新状态。我还没stateful开机
但是,我不同意batch_size只能是 1 when stateful==True

目前,您使用收集的数据生成数据。想象您的股票信息以流的形式出现,而不是等待一天来收集所有顺序,您希望在使用网络进行训练/预测时 在线生成输入数据。
如果您有 400 只股票共享同一个网络,那么您可以设置batch_size==400.

2022-03-24