了解Keras LSTM
我试图调和我对LSTMs的理解,并在这里指出: http ://colah.github.io/posts/2015-08-Understanding-LSTMs/与Keras中实现的LSTM。 我正在关注为Keras教程写的http://machinelearningmastery.com/time-series-prediction-lstm-recurrent-neural-networks-python-keras/的博客。 我主要困惑的是,
- 将数据序列重塑为
[samples, time steps, features]
- 有状态的LSTMs
让我们把注意力集中在以上两个问题上,参考下面的代码:
# 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是一个三维数组,其中Time_steps和Feature分别是最后两个维(在这个特定的代码中是3和1)。 关于下面的图片,这是否意味着我们正在考虑many to one
情况,粉盒的数量是3? 或者它是否意味着链长是3(即只考虑3个绿色框)。
当我们考虑多元系列时,特征论证是否变得相关? 例如同时build模两个金融股?
有状态的LSTM
有状态的LSTM是否意味着我们在批次运行之间保存单元内存值? 如果是这样的话, batch_size
是一个,并且训练运行之间的内存是重置的,所以说它是有状态的。 我猜这是与训练数据不混洗有关,但我不知道如何。
有什么想法吗? 图片参考: http : //karpathy.github.io/2015/05/21/rnn-effectiveness/
编辑1:
对@ van对红色和绿色方框的评论有点混淆。 所以只是为了确认,下面的API调用是否与展开图相对应? 特别注意第二个图( batch_size
是任意select的):
编辑2:
对于那些做过Udacity的深入学习的人,仍然对time_step的争论感到困惑,请看下面的讨论: https ://discussions.udacity.com/t/rnn-lstm-use-implementation/163169
更新:
事实certificate, model.add(TimeDistributed(Dense(vocab_len)))
是我正在寻找。 这里是一个例子: https : //github.com/sachinruk/ShakespeareBot
UPDATE2:
我在这里总结了我对LSTM的大部分理解: https : //www.youtube.com/watch?v= ywinX5wgdEU
首先,你select伟大的教程( 1,2 )开始。
什么时间步骤意味着 : Time-steps==3
X.shape(描述数据形状)意味着有三个粉红色的框。 由于在凯拉斯每一步都需要input,所以绿色框的数量通常应该等于红色框的数量。 除非你破解这个结构。
多对多与多对一 :在keras中,当初始化LSTM
或GRU
或SimpleRNN
时有一个return_sequences
参数。 当return_sequences
为False
(默认),则如图所示,它是多对一的。 它的返回形状是(batch_size, hidden_unit_length)
,表示最后一个状态。 当return_sequences
为True
,则是多对多的 。 它的返回形状是(batch_size, time_step, hidden_unit_length)
特征参数是否变得相关 :特征参数意味着“您的红色框有多大”或每个步骤的input维度是什么。 如果你想从8种市场信息中预测,那么你可以用feature==8
生成你的数据。
有状态 :您可以查看源代码 。 当初始化状态时,如果stateful==True
,那么上次训练的状态将被用作初始状态,否则会产生一个新的状态。 我还没有开启stateful
。 不过,我不同意batch_size
只有在stateful==True
时才是1。
目前,您使用收集的数据生成数据。 形象化您的股票信息即将stream入,而不是等待一整天收集所有顺序,您想在networking上训练/预测时在线生成input数据。 如果你有400个股票共享一个networking,那么你可以设置batch_size==400
。