1
內置的LSTM單元給你一個可調用的。不過,我想在LSTM圖層前後添加靜態圖層,並通過反向傳播訓練所有內容。那可能嗎?如何使用Tensorflow的LSTM單元作爲更大圖的一部分?
內置的LSTM單元給你一個可調用的。不過,我想在LSTM圖層前後添加靜態圖層,並通過反向傳播訓練所有內容。那可能嗎?如何使用Tensorflow的LSTM單元作爲更大圖的一部分?
細胞callable
是一個函數,其採用輸入tf.Tensor
和當前狀態作爲tf.Tensor
,並返回一個輸出tf.Tensor
和新狀態作爲tf.Tensor
。輸入/輸出和狀態張量沒有什麼特別之處:這些可以從其他TensorFlow操作的輸入計算和/或用作輸入。
有關示例,看看ptb_word_lm.py
模型:
for time_step in range(num_steps):
# ...
(cell_output, state) = cell(inputs[:, time_step, :], state)
outputs.append(cell_output)
這裏,inputs
是從其中一個片被取爲得到該LSTM的一個單元的輸入端的3-d張量,並state
是initially使用cell.zero_state()
計算,然後每個後續迭代使用來自先前迭代的狀態。
inputs
張量是tf.nn.embedding_lookup()
操作的result; outputs
列表爲later concatenated,並用作損失計算的輸入。 TensorFlow通過RNN和嵌入查找將損失反向回傳給模型變量。
我認爲你描述的方法有一個缺點,即如果num_steps非常大,圖形將花費大量的時間和內存進行初始化。此外,如果您從一開始就不知道時間序列的長度(即流式傳輸數據),則您的網絡將進行處理將毫無用處。糾正我,如果我錯了 –
是的,在某些情況下,你應該使用['tf.nn.dynamic_rnn()'](https://www.tensorflow.org/versions/r0.9/api_docs/python/nn .html#dynamic_rnn),它不展開循環。目前沒有處理流數據的庫方法,但原始問題沒有這個要求。對於流數據,你可以使用'tf.while_loop()'來實現某些東西,但是當你知道提前的最大時間步數時,當前實現會更有效率。 – mrry