gpt4 book ai didi

python - Keras 中 LSTM 的 TimeDistributed 层和返回序列等

转载 作者:太空宇宙 更新时间:2023-11-04 02:50:37 26 4
gpt4 key购买 nike

抱歉,我是 RNN 的新手。我读过this post在 TimeDistributed 层上。

我已将数据 reshape 为 Keras 要求的 [samples, time_steps, features]:[140*50*19],这意味着我有 140 个数据点,每个都有 50 个时间步长和 19 个特征。我的输出形状为 [140*50*1]。我更关心最后一个数据点的准确性。这是一个回归问题。

我当前的代码是:

x = Input((None, X_train.shape[-1]) , name='input')
lstm_kwargs = { 'dropout_W': 0.25, 'return_sequences': True, 'consume_less': 'gpu'}
lstm1 = LSTM(64, name='lstm1', **lstm_kwargs)(x)
output = Dense(1, activation='relu', name='output')(lstm1)
model = Model(input=x, output=output)
sgd = SGD(lr=0.00006, momentum=0.8, decay=0, nesterov=False)
optimizer = sgd
model.compile(optimizer=optimizer, loss='mean_squared_error')

我的问题是:

  1. 我的案例是多对多的,所以我需要使用return_sequences=True?如果我只需要最后一个时间步的预测,那将是多对一的。所以我需要我的输出是 [140*1*1]return_sequences=False
  2. 如果我使用多对多,是否可以提高我最后一次时间点的准确性?我更关心它而不是其他点的准确性。
  3. 我尝试使用 TimeDistributed 层作为

    output = TimeDistributed(Dense(1, activation='relu'), name='output')(lstm1)

    性能似乎比不使用 TimeDistributed 层更差。为什么会这样?

  4. 我尝试使用 optimizer=RMSprop(lr=0.001)。我认为 RMSprop 应该可以稳定 NN。但是我一直无法使用 RMSprop 获得好的结果。
  5. 如何为 SGD 选择一个好的 lr 和动量?我一直在手动测试不同的组合。 keras中有交叉验证方法吗?

最佳答案

所以:

  1. 是 - return_sequences=False 使您的网络仅输出序列预测的最后一个元素。
  2. 您可以使用 Lambda 定义输出切片层。 Here您可以找到有关如何执行此操作的示例。将输出切片后,您可以提供额外的输出,您将在其中提供最后一个时间步长的值。
  3. 从计算的角度来看,这两种方法是等效的。也许问题在于权重采样引入的随机性。
  4. 实际上 - 使用 RMSProp 作为 RNN 的首选是一个经验法则 - 而不是普遍证明的定律。此外 - 强烈建议不要更改它的参数。所以这可能会导致问题。另一件事是 LSTM 需要大量时间来稳定。也许你需要把它留到更多的时代。最后一件事 - 也许您的数据可能有利于另一个激活功能。
  5. 你可以使用 keras.sklearnWrapper .

关于python - Keras 中 LSTM 的 TimeDistributed 层和返回序列等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43988332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com