python - 了解 Keras LSTM

标签 python deep-learning keras lstm

我试图调和我对 LSTM 的理解,并在 this post by Christopher Olah 中指出在 Keras 中实现。我正在关注 blog written by Jason Brownlee对于 Keras 教程。我主要困惑的是,

  • 将数据系列重塑为 [samples, time steps, features]和,
  • 有状态的 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 个绿色框)。 enter image description here
    当我们考虑多元序列时,特征参数是否变得相关?例如同时建模两只金融股?
    有状态的 LSTM
    有状态 LSTM 是否意味着我们在批次运行之间保存单元内存值?如果是这种情况,batch_size是一个,并且内存在训练运行之间重置,所以说它是有状态的有什么意义。我猜这与训练数据没有混洗的事实有关,但我不确定如何混洗。
    有什么想法吗?
    图片引用:http://karpathy.github.io/2015/05/21/rnn-effectiveness/
    编辑1:
    对@van 关于红框和绿框相等的评论有点困惑。所以只是确认一下,以下 API 调用是否对应于展开的图表?特别注意第二张图(batch_size 是任意选择的。):
    enter image description here
    enter image description here
    编辑2:
    学过Udacity的深度学习类(class),还对time_step参数感到困惑的人,看下面的讨论:https://discussions.udacity.com/t/rnn-lstm-use-implementation/163169
    更新:
    原来model.add(TimeDistributed(Dense(vocab_len)))是我要找的。这是一个例子:https://github.com/sachinruk/ShakespeareBot
    更新2:
    我在这里总结了我对 LSTM 的大部分理解:https://www.youtube.com/watch?v=ywinX5wgdEU

    最佳答案

    首先,您选择很棒的教程( 12 )开始。

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

    多对多 vs. 多对一 : 在 keras 中,有一个 return_sequences初始化时的参数 LSTMGRUSimpleRNN .当return_sequencesFalse (默认),那么它是 多对一如图所示。它的返回形状是(batch_size, hidden_unit_length) ,代表最后一个状态。当return_sequencesTrue ,那么就是 多对多 .它的返回形状是(batch_size, time_step, hidden_unit_length)
    特征参数是否相关 :特征参数表示 “你的红盒子有多大”或者每一步的输入维度是多少。如果您想从 8 种市场信息中进行预测,那么您可以使用 feature==8 生成您的数据。 .

    有状态 : 可以查the source code .初始化状态时,如果stateful==True ,则将使用上次训练的状态作为初始状态,否则将生成新状态。我还没开机stateful然而。但是,我不同意 batch_size stateful==True时只能为1 .

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

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

    相关文章:

    python - 我应该为 qt4 使用哪个 react 器?

    python - 来自单个种子的多个独立随机数流

    Tensorflow:如何处理多个输入

    tensorflow - 如何理解transformer中的masked multi-head attention

    python - 从 URL 下载文件并将其保存在 Python 文件夹中

    python - 如何修复 python int 转换错误?

    machine-learning - PyTorch 批量大小在 n epoch 后突然减小

    python - Keras 将功能模型转换为模型子类

    machine-learning - 向 Keras 中 Flatten() 层的输出添加新功能

    tensorflow - 文本分类问题