2017-06-15 46 views
0

大家好,我与tensorflow RNN实施struggeling:LSTM-RNN:如何塑造多元投入

问题:

我要培养的RNN的LSTM implentation以检测恶意连接KDD99数据集。它与41层的功能和(一些预处理后)的大小5

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


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

作为基本architurecture的标签矢量数据集,我想实现以下:

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的序列长度,第一suqence将包含数据点0 - 9,第二个包含数据点1 - 10,2 - 11等。

谢谢!

回答

2

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

在 'tf.contrib.rnn.static_rnn' 具有以下特征:

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

其中

inputs:的输入端A长度T列表,每个的形状的张量[batch_size时, input_size]或这些元素的嵌套元组。

所以输入需要被整形为列表,其中列表的每个元素都是每个时间步的输入序列的元素。

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

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

在这里,我们到达你的问题,考虑到这个固定的长度,让我们说10,我如何塑造我的输入?

通常情况下,是什么做的是削减不相重叠的窗口数据集(在你的榜样,我们将有1-9,10-19,20-29,等等。这里发生的是,网络只在每次使用BPTT更新权重时看起来是该序列的最后10个元素

但是,由于序列已被任意削减,所以很可能预测需要利用序列中遥远的证据,当前窗口为此,我们用窗口i-1的窗口i初始化RNN的初始状态,使用参数:

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这是一个谈话的Tensorflow DevSummit 2017年期间的视频,其中,在第一部分(阅读和配料序列数据),它解释了如何使用这些功能,你应该塑造你的序列投入。

希望这会有所帮助:)