我试图调和我对 LSTM 的理解,并在Christopher Olah在 Keras 中实现的这篇文章中指出。我正在关注Jason Brownlee为 Keras 教程编写的博客。我主要困惑的是,
[samples, time steps, features]
让我们参考下面粘贴的代码专注于上述两个问题:
# 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长度序列。
N-look_back
look_back
可以看出 TrainX 是一个 3-D 数组,其中 Time_steps 和 Feature 分别是最后两个维度(在此特定代码中为 3 和 1)。对于下图,这是否意味着我们正在考虑many to one粉红色框数为 3 的情况?或者它的字面意思是链长为 3(即只考虑 3 个绿色框)。
many to one
当我们考虑多元序列时,特征参数是否变得相关?例如同时模拟两只金融股?
有状态 LSTM 是否意味着我们在批次运行之间保存单元记忆值?如果是这种情况,batch_size就是一个,并且内存在训练运行之间被重置,那么说它是有状态的有什么意义。我猜这与训练数据没有被打乱的事实有关,但我不确定如何。
batch_size
有什么想法吗?图片参考: http: //karpathy.github.io/2015/05/21/rnn- effectiveness/
对@van 关于红色和绿色框相等的评论有点困惑。所以只是为了确认一下,以下 API 调用是否对应于展开的图表?特别注意第二张图(batch_size是任意选择的。):
对于已经完成了 Udacity 的深度学习课程并且仍然对 time_step 参数感到困惑的人,请查看以下讨论:https ://discussions.udacity.com/t/rnn-lstm-use- implementation/163169
事实证明这model.add(TimeDistributed(Dense(vocab_len)))就是我要找的。这是一个例子:https ://github.com/sachinruk/ShakespeareBot
model.add(TimeDistributed(Dense(vocab_len)))
首先,您选择很棒的教程(1、2 )开始。
什么时间步意味着 :Time-steps==3在 X.shape(描述数据形状)中意味着有三个粉红色的框。由于在 Keras 中每一步都需要输入,因此绿色框的数量通常应该等于红色框的数量。除非你破解结构。
Time-steps==3
多对多 vs. 多对一return_sequences:在 keras 中,初始化LSTMorGRU或时有一个参数SimpleRNN。什么时候return_sequences是False(默认情况下),那么它是 多对一的 ,如图所示。它的返回形状是(batch_size, hidden_unit_length),代表最后一个状态。什么时候return_sequences是True,那么就是 多对多 。它的返回形状是(batch_size, time_step, hidden_unit_length)
return_sequences
LSTM
GRU
SimpleRNN
False
(batch_size, hidden_unit_length)
True
(batch_size, time_step, hidden_unit_length)
特征参数是否变得相关 :特征参数表示 “你的红框有多大” 或每一步的输入维度是多少。如果您想从 8 种市场信息中进行预测,那么您可以使用feature==8.
feature==8
有状态 :您可以查找源代码。初始化状态时,如果stateful==True,则将上次训练的状态作为初始状态,否则将生成新状态。我还没stateful开机 但是,我不同意batch_size只能是 1 when stateful==True。
stateful==True
stateful
目前,您使用收集的数据生成数据。想象您的股票信息以流的形式出现,而不是等待一天来收集所有顺序,您希望在使用网络进行训练/预测时 在线生成输入数据。 如果您有 400 只股票共享同一个网络,那么您可以设置batch_size==400.
batch_size==400