Dynamic seq2seq in tensorflow


v1.0 tensorflow漸漸廢棄了老的非dynamicseq2seq接口,已經放到 tf.contrib.legacy_seq2seq目錄下面。

tf.contrib.seq2seq下面的實現都是dynamic seq2seq接口。

按照googlerd說法下個月將會給出更加完善的接口和實現。

當前版本也可以使用這里嘗試分析一下現有dynamic seq2seq的代碼。

   

首先核心函數是seq2seq.py下面的 dynamic_rnn_decoder

   

這里首先看下dynamic的概念,即不需要確定的輸入長度,以及batch 大小, 都可以動態。

但是注意首先每個batch對應所有樣本的輸入長度還是需要一樣的 作為dense數據 否則 不可處理

   

這也就是說如果你需要特別在意速度的話,即使使用dyanmic 也可能還需要使用bucket來聚集相似長度的

輸入樣本作為一個batch 加速訓練。

不過一般意義上不用的話,代碼比較簡單,加上dyanmicseq2seq 性能也可以接受,同時好處是每個batch

的樣本可以完全隨機。

   

dynamic_rnn_decoder核心是內部調用raw_rnn來實現迭代過程,這里的dynamic最主要體現在輸入的

decoder_fn函數上面。

   

這個函數允許計算提前終止(early stop) 也就是說 假如你做inference,不用dynamic seq2seq

你一般的做法是指定一個 最大decode長度 比如20, 那么對應所有樣本其實都需要decode走完20

Step 哪怕所有的樣本對應輸出序列長度都不大於10

   

而有了dynamic decode 當一個batch 所有的樣本decode到達 類似<END>結束符之后,整個decode過程就

結束了。

   

但是注意這里仍然是以batch為基礎的,也就是說有一個樣本比如decode 2次就到達結束符,但是由於

組內其它樣本沒有結束,仍然需要所有樣本繼續向后解析,也就是說batch size越大,結束的可能越晚。

   

dynamic_rnn_decodertraininference兩種模式,不過如果不使用attention,個人感覺train的時候直接

dynamic_rnn接口就可以了。

   

最后按照剛剛master的代碼,seq2seq提供了decoder.py以及sampling_decoder.py等相關的示例,

這個接口更加簡潔清晰,也就是說不再用context_state來記錄用戶其余的狀態,而是用戶自定義

output的結構 將其它信息也直接寫入output

mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmimmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM