2017-06-15 47 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年期間的視頻,其中,在第一部分(閱讀和配料序列數據),它解釋瞭如何使用這些功能,你應該塑造你的序列投入。

希望這會有所幫助:)