【问题标题】:LSTM-RNN : How to shape multivariate InputsLSTM-RNN:如何塑造多元输入
【发布时间】:2017-06-15 23:27:24
【问题描述】:

大家好,我正在为 tensorflow RNN 实现而苦苦挣扎:

问题:

我想训练 RNN 的 LSTM 实现,以检测 KDD99 数据集中的恶意连接。它是一个包含 41 个特征和(经过一些预处理)大小为 5 的标签向量的数据集。

[ 
[x1, x2, x3, .....x40, x41],
... 
[x1, x2, x3, .....x40, x41]
]


[ 
[0, 1, 0, 0, 0],
...
[0, 0, 1, 0, 0]
]

作为一个基本架构,我想实现以下内容:

cell = tf.nn.rnn_cell.LSTMCell(num_units=64, state_is_tuple=True)
cell = tf.nn.rnn_cell.DropoutWrapper(cell=cell, output_keep_prob=0.5)
cell = tf.nn.rnn_cell.MultiRNNCell(cells=[cell] * 3, state_is_tuple=True)

我的问题是:为了将其提供给模型,我需要如何重塑输入特征?

我是否不仅要重塑输入特征,还要构建滑动窗口序列?

我的意思是:

假设序列长度为 10,第一个序列将包含数据点 0 - 9,第二个序列包含数据点 1 - 10、2 - 11,依此类推。

谢谢!

【问题讨论】:

    标签: machine-learning tensorflow deep-learning lstm


    【解决方案1】:

    我不知道数据集,但我认为你的问题如下:你有一个很长的序列,你想知道如何塑造这个序列以便将它提供给网络。

    “tf.contrib.rnn.static_rnn”具有以下签名:

    tf.contrib.rnn.static_rnn(cell, inputs, initial_state=None, dtype=None, sequence_length=None, scope=None)
    

    在哪里

    inputs:一个长度为 T 的输入列表,每个输入都是一个形状为 [batch_size, input_size] 的张量,或者是此类元素的嵌套元组。

    因此需要将输入塑造成列表,其中列表的每个元素都是每个时间步的输入序列的元素。

    此列表的长度取决于您的问题和/或计算问题。

    • 例如,在自然语言处理中,此列表的长度可以是文档的最大句子长度,其中较短的句子被填充到该长度。在这种情况下,在许多领域中,序列的长度是由问题驱动的
    • 但是,您的问题中可能没有此类证据,或者仍然有很长的序列。从计算的角度来看,长序列非常重。用于优化此模型的 BPTT 算法在具有共享参数的非常深的前馈网络中“展开”循环网络,并在其上反向传播。在这种情况下,将序列“切割”为固定长度仍然很方便。

    在这里,我们遇到了您的问题,给定这个固定长度,让我们说 10,我如何塑造我的输入?

    通常,所做的是在 非重叠窗口 中切割数据集(在您的示例中,我们将有 1-9、10-19、20-29 等。这里发生的是网络每次使用 BPTT 更新权重时只查看序列的最后 10 个元素。

    但是,由于序列已被任意切割,因此预测很可能需要利用序列中远在当前窗口之外的证据。为此,我们使用参数将 RNN 在窗口 i 的初始状态初始化为窗口 i-1 的最终状态:

    initial_state:(可选)RNN 的初始状态。

    最后,我给你两个来源来详细说明:

    1. RNN Tutorial这是tensorflow的官方教程。它适用于语言建模的任务。在代码的某个点,您将看到最终状态从一次运行到下一次被馈送到网络,以实现上述内容。

      feed_dict = {}
      for i, (c, h) in enumerate(model.initial_state):
        feed_dict[c] = state[i].c
        feed_dict[h] = state[i].h
      
    2. DevSummit 2017 这是 2017 年 Tensorflow DevSummit 期间的演讲视频,在第一部分(读取和批处理序列数据)中,解释了如何以及使用哪些函数你应该塑造你的序列输入。

    希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 2018-12-10
      • 1970-01-01
      • 2017-10-25
      • 2019-09-07
      相关资源
      最近更新 更多