首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >怎么理解Keras LSTM ?

怎么理解Keras LSTM ?
EN

Stack Overflow用户
提问于 2018-04-24 03:25:08
回答 1查看 0关注 0票数 0

我正在为Keras教程编写的http://machinelearningmastery.com/time-series-prediction-lstm-recurrent-neural-networks-python-keras/博客。主要问题:

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

参考下面粘贴的代码:

代码语言:txt
复制
# 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()

注:创建_DataSet接受长度N的序列,并返回N-look_back数组,其中每个元素都是look_back长度序列

时间的步骤和特点是什么?

可以看到,TrainX是一个具有时间的三维数组。其中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:

编辑2:

对于那些已经完成了Udacity的深造课程,但仍然感到困惑的人,请参阅以下讨论:https://discussions.udacity.com/t/rnn-lstm-use-implementation/163169

更新:

结果发现model.add(TimeDistributed(Dense(vocab_len)))就是我要找的东西。以下是一个例子:https://github.com/sachinruk/莎士比亚机器人

UPDATE2:

我在这里总结了我对LSTM的大部分理解:https://www.youtube.com/watch?v=ywinX5wgdEU

EN

回答 1

Stack Overflow用户

发布于 2018-04-24 13:08:54

首先,你选择教程(12)开始。

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

多对多对多对一:在keras中,return_sequences当初始化LSTMGRUor 时有一个参数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的时候stateful==True

目前,使用收集的数据生成数据。形象化股票信息即将流入,而不是等待一天收集所有顺序,希望在网络上进行培训/预测时在线生成输入数据。如果你有400个股票共享一个网络,那么你可以设置batch_size==400

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100004449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档