簡體   English   中英

Tensorflow動態RNN(LSTM):如何格式化輸入?

[英]Tensorflow dynamic RNN (LSTM): how to format input?

我收到了一些這種格式的數據和以下細節:

person1, day1, feature1, feature2, ..., featureN, label
person1, day2, feature1, feature2, ..., featureN, label
...
person1, dayN, feature1, feature2, ..., featureN, label
person2, day1, feature1, feature2, ..., featureN, label
person2, day2, feature1, feature2, ..., featureN, label
...
person2, dayN, feature1, feature2, ..., featureN, label
...
  • 總是有相同數量的功能,但每個功能可能是0表示什么都沒有
  • 每個人都有不同的天數,例如,person1有20天的數據,person2有50天

目標是預測第二天的人的標簽,因此dayN + 1的標簽,無論是基於每個人,還是整體(每個人對我更有意義)。 我可以自由地重新格式化數據(它不是很大)。 基於上面的一些閱讀之后,我認為動態RNN(LSTM)可能效果最好:

  • 反復神經網絡:因為第二天依賴於前一天
  • lstm:因為模型每天都會建立起來
  • 動態:因為並非每天都有所有功能

如果對我的數據沒有意義,請在這里阻止我。 問題是:

如何為tensorflow / tflearn提供/格式化這些數據?

我使用tflearn查看了這個例子,但是我不理解它的輸入格式,所以我可以“鏡像”它到我的。 同樣地,在一個非常相似的問題上找到了這篇文章,但看起來海報所擁有的樣本彼此之間沒有相關性,因為它們在我的中。 我對tensorflow的體驗僅限於其入門頁面。

動態:因為並非每天都有所有功能

你在這里有錯誤的動態概念。 Tensorflow中的動態RNN意味着圖形是在執行期間動態創建的,但輸入總是相同的大小(0表示缺少某個功能應該可以正常工作)。

無論如何,你在這里得到的是特征向量(feature1 ... featureN)的不同長度(第1天......天?)的序列。 首先,您需要一個LSTM單元

cell = tf.contrib.rnn.LSTMcell(size)

這樣您就可以使用tf.nn.dynamic_rnn創建動態展開的rnn圖。 來自文檔:

輸入:RNN輸入。

如果time_major == False(默認值),則必須是形狀張量:[batch_size,max_time,...]或此類元素的嵌套元組。

其中max_time指的是輸入序列長度。 因為我們使用的是dynamic_rnn,所以在編譯期間不需要定義序列長度,因此輸入占位符可以是:

x = tf.placeholder(tf.float32, shape=(batch_size, None, N))

然后將其送入rnn之類的

outputs, state = tf.nn.dynamic_rnn(cell, x)

意味着您的輸入數據應具有形狀(batch_size, seq_length, N) 如果一個批處理中的示例具有不同的長度,則應使用0向量填充它們到最大長度,並將適當的sequence_length參數傳遞給dynamic_rnn

顯然我已經跳過很多細節,所以為了完全理解RNN,你應該閱讀許多優秀的RNN教程之一,比如這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM