Dynamic seq2seq in tensorflow

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

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

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

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

   

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

   

這裏首先看下dynamic的概念,即不須要肯定的輸入長度,以及batch 大小, 均可以動態。 接口

可是注意首先每一個batch對應全部樣本的輸入長度仍是須要同樣的 做爲dense數據 不然 不可處理 io

   

這也就是說若是你須要特別在乎速度的話,即便使用dyanmic 也可能還須要使用bucket來彙集類似長度的 ast

輸入樣本做爲一個batch 加速訓練。 基礎

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

的樣本能夠徹底隨機。

   

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

相關文章
相關標籤/搜索