我將queued reader應用於tensorflow seq2seq以避免將整個數據集讀入內存並預先處理它們。我沒有首先將數據集存入不同的存儲桶文件,以確保每個批次的存儲桶大小也需要很多時間。因此,來自隊列讀取器的每批數據可能包含不同桶大小的序列,這導致運行原始seq2seq模型失敗(它假定一批中的數據具有相同的桶大小,並且只選擇取決於桶的大小來執行一個子圖)在張量流seq2seq框架中,如何在一個批次中訓練不同桶尺寸的數據
我曾嘗試:
原實裏,子圖,多達桶,構建共享相同的參數。它們之間的唯一區別是在其RNN過程中應該採取的計算時間。 我改變了子圖的條件之一,當switch
爲真,將計算該桶的bucket_loss
並將其添加到loss_list
當switch
是假,什麼也不做,並添加tf.constant(0.0)
到loss_list
。最後,我用total_loss = tf.reduce_sum(loss_list)
來收集所有的損失和構建的梯度圖。另外,我在每一步都會輸入switches_list
模型。 switches_list
的大小與桶的大小相同,如果在該批次中有第i桶大小的數據,則switches_list
中對應的第i個開關將爲True,否則爲False。
遇到的問題:
- 當反向傳播過程中,通過
tf.cond(...)
節點去了,我被gradient.py
有些稀疏張量 轉化警告,密密麻麻一個 - ,當我試圖獲取
total_loss
或bucket_loss
,我被告知:
ValueError: Operation u'cond/model_with_one_buckets/sequence_loss/truediv' has been marked as not fetchable.
請你幫幫我:
- 我該如何解決上述兩個問題?
- 我應該如何修改圖表以符合我的要求?
- 在一批 批次中有什麼更好的想法來培訓不同桶尺寸的數據?
- 任何更好的想法應用異步隊列閱讀器seq2seq 框架沒有首先整個數據集?