閱讀472 返回首頁    go 技術社區[雲棲]


如何用Tensorflow實現RNN?本文將帶你進一步研究

更多深度文章,請關注:https://yq.aliyun.com/cloud


tensorflow API。 tensorflow文檔很好地解釋了如何構建標準的RNN,但是對於構建RNN而言,

Chung等人在Hierarchical Multiscale Recurrent Neural Networks中描述的網絡,作為一個非遞歸神經網絡的示例。在github上有一個開源的網絡實現。

tensorflowRNN的工具。

RNN

RNNGRULSTM,則你可以使用tensorflow API包含這些預先寫入的單元,所有這些都擴展了基類RNNCell。 他們關於RNN的教程中給出了如何使用這些單元的良好概述,所以我不會花太多時間在這裏。 如果你在tensorflowRNN,則可能需要先閱讀該教程才能繼續。

MultiRNNCell。 這是一個類,它用一個延伸RNNCell的對象列表構成。 它用於創建多層RNN,其中最低層在輸入中被饋送,然後每個後續層被饋送到先前層的輸出,並且最後一層的輸出是在給定時間步長的網絡的輸出。 如果要以不同的方式在圖層之間傳遞信息,則需要一個自定義的多單元格。我們稍後再談這個。

MutliRNNCell本身也擴展了RNNCell,因此可以在任何其他RNNCell可以使用的地方使用。

動態展開的RNNs

RNNs展開時最容易考慮到。 在tensorflow

tensorflow教程模型的方法。 這種方法的優點在於它易於思考,而且是靈活的。 如果要在傳遞之前以任何方式處理隱藏狀態,你可以輕鬆地將多個節點放在圖形中。

0填充它們。兩種解決辦法都不好。

RAM。 根據你的計算環境的限製,這可能是令人望而生畏的。

tf.dynamic_rnn函數將你的RNNCell轉換為動態生成的圖形,將圖形從一個時間步驟傳遞到下一個時間段,並跟蹤輸出。 如果你有其他需求,tf.scan可以更靈活地提供類似的用途,我們將在後麵看到。

RNN

RNN的選項。

RNNCell

RNNCell。 你可以使用你自己的子類與上述的MultiRNNCell類以及DropoutWrapper和其他預定義的RNNCell包裝器。

RNNCell意味著至少覆蓋state_size屬性,output_size屬性和調用方法。 Tensorflow的預構建單元內部表示狀態作為信號張量或張量的元組。 如果是單一的張量,則進入單元格後會被細分為隱藏狀態(或任何情況),然後最終將新狀態粘在一起。

state_size屬性隻是一個元組,其長度取決於您跟蹤哪一個。 output_size是單元格輸出的長度。 調用函數是您的單元格的邏輯空間。 RNNCell的__call__方法將包裝您的調用方法,並幫助實現範圍界定和其他邏輯。

RNNCell,調用方法必須接受參數input和state,並返回一個輸出元組new_state,其中state和new_state必須具有相同的形式。

RNNCell,你想要與tensorflow中已經存在的tensorflow變量一起使用,則可以在__init__方法中將_reuse = True參數傳遞給父構造函數。 如果這些變量已經存在但是你沒有通過_reuse = True,那麼你會收到一個錯誤,因為tensorflow既不會覆蓋現有的變量,也不會在沒有顯式指令的情況下重用它們。

HMLSTMCell類是用於表示上述分層和多尺度RNN的一個單元的RNNCell。 其實施涵蓋以上所有要點。

rnn_cell_impl模塊中使用了一個未記錄的函數,叫做_linear,這個函數在RNNCell子類中大部分被使用。 這有點冒險,因為它顯然不是為了外部使用,但它是一個有用的小函數,用來處理矩陣乘法及增加權重和偏差。

RNN

RNN,其中層不會簡單地將其輸出從一層到另一層傳遞,那麼必須構建你自己的MultiCell版本。 很像內置的MultiRNNCell,你的多單元應該擴展RNNCell。

LSTM中,每個單元格希望從其上一層的層上接收隱藏狀態,作為其輸入的一部分。 這不符合堆疊RNN的標準思想,所以我們不能使用通常的MultiRNNCell。 作為參考,這裏是MultiHMLSTMCell的實現。

tf.scan

LSTM網絡要求將隱藏狀態饋送到某些輸出網絡。 我們已經看到,這個HMLSTM網絡不能整齊地適應tensorflowRNN範例,由於它如何處理層之間的傳遞信息; 現在我們又碰到了另一個障礙。 我們需要通過另一個網絡傳遞所有圖層的隱藏狀態,以獲得我們真正關心的輸出,而不是考慮最後一層輸出的網絡輸出。 不僅如此,我們關心一些被視為單元狀態的指示神經元的價值。

tf.dynamic_rnn網絡,它隻返回每個時間步長和最終狀態的輸出。

tf.scan具有任意函數和有序的元素集合。 然後將該函數應用於集合中的每個元素,跟蹤一些累加器。 它在進程的每個步驟返回累加器的值的有序集合。

RNN是完美的。 因為你可以定義函數,所以可以選擇輸入、輸出和狀態。之後,你可以在每個時間步驟中獲得狀態的完整記錄,而不僅僅是輸出。

HMLSTM的情況下,我們使用這些狀態來跟蹤邊界檢測,並且我們還對它們進行映射以獲得最終的預測。

這裏是參考代碼。

tensorflow中處理RNN的標準工具,並探討了一些更靈活的選項,以便在這些工具不足時使用。


本文由北郵@愛可可-愛生活老師推薦,阿裏雲雲棲社區組織翻譯。

》,

作者:審閱:袁虎

文章為簡譯,更為詳細的內容,請查看原文

最後更新:2017-07-19 17:02:43

  上一篇:go  視頻數據智能結構化 引領安防進入SDT時代
  下一篇:go  二甲基四苯基二矽氧烷 IOTA 259