【问题标题】:LSTM network for daily weather forecast with init state用于具有初始状态的每日天气预报的 LSTM 网络
【发布时间】:2019-08-21 12:28:17
【问题描述】:

对于两个天气值的预测,我有一个数据集,其中包含一年的数据,分辨率为 15 分钟。因此可以获得每天 96 个时间点的数据,总共 365 * 96 个。

每当我在LSTM网络中输入一天的数据进行训练,我也想给出输出状态的真实实测数据h

# tensor for setting output state h
init_state = tf.reshape(init_state, [1, 2])
init_state = tf.nn.rnn_cell.LSTMStateTuple(tf.constant([[0, 0]], tf.float32), init_state)

# tensor placeholder for input data with 2 inputs
train_placeholder = tf.placeholder(tf.float32, [1, 96, 2])

# hidden size equals 2, because LSTM output and output state h have 2 values
cell = tf.contrib.rnn.LSTMCell(2)
rnn_outputs_ts, state = tf.nn.dynamic_rnn(cell, train_placeholder,
                                          dtype=tf.float32, initial_state=init_state) 

培训每天循环进行:

# daily training of the weather data
for step in len(train_data):
    sess.run(train_lstm, {train_placeholder: train_data[step].reshape(1, 96, 2),
                          init_state: init_data[step].reshape(1, 2) })

如果我按照描述在每次迭代中设置输出状态 h,我会得到比默认情况下输出状态 h 始终设置为零更好的结果。

由于输出状态 h 包含我输入实际测量值的两个值,因此 LSTM 单元的隐藏大小也限制为 2。 然而,在没有手动设置输出状态 h 的情况下,我注意到如果 LSTM 单元的隐藏大小大于 2 并且输出变平为 2,则可能会有更好的结果。 MultiRNNCell 也是如此,由于输出状态 h,我也不使用它。

一方面我想要一个更大的LSTM网络,但另一方面我也想用真实的测量数据设置输出状态h

您将如何处理我的情况?

【问题讨论】:

    标签: python tensorflow machine-learning lstm


    【解决方案1】:

    我认为您需要另一个层 - 网络通常具有一个输入层、多个中间层和一个执行最终分类的输出层。在您的情况下,您可以在 LSTM 层之后添加一个具有 2 个神经元的 Dense() 层。

    此外,不推荐使用 LSTMCell (https://www.tensorflow.org/api_docs/python/tf/nn/rnn_cell/LSTMCell),并将在 tensorflow 2.0 中删除。我建议使用 Keras(围绕 tensorflow 的包装器)来设置您的网络 - 它提供了许多便利功能并有助于分析您的模型。查看此处了解如何设置 LSTM 模型:https://adventuresinmachinelearning.com/keras-lstm-tutorial/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 2021-07-28
      • 2011-05-16
      相关资源
      最近更新 更多