我們有一個在Android上運行的工作TensorFlow網絡(graphdef),我注意到隨着時間推移的結果往往是相關的。這就是說,如果標籤A被返回,那麼即使當輸入數據切換到應該生成B標籤的數據時,它也往往是A的一串時間流。最終,結果將切換到B,但似乎有滯後,並表明RNN在推理調用之間是有狀態的。我們的網絡正在使用RNN/LSTM。TensorFlow:在Android中的推理之間初始化RNN的狀態
cellLSTM = tf.nn.rnn_cell.BasicLSTMCell(nHidden)
cellsLSTM = tf.nn.rnn_cell.MultiRNNCell([cellLSTM] * 2)
RNNout, RNNstates = tf.nn.rnn(cellsLSTM, Xin)
我想知道是否需要在推理調用之間重新初始化RNN狀態。我會注意到在TensorFlowInferenceInterface.java接口中沒有這種方法可用。我想,可以將一個RNN單元初始化節點插入到可以用節點值激活的圖形中(使用FillNodeInt或類似的方法)。
所以我的問題是:在Tensorflow中RNN/LSTMs的最佳做法是什麼。是否需要在推理之間清除狀態?如果是這樣,一個人怎麼做?
相反,RNNs可以向前攜帶狀態:
最後,RNN在新的動態RNN來定義:如
初始狀態可以然後被定義隨着時間的推移未初始化時,如果使用培訓課程中的隨機系列幀進行訓練,則它們在實際數據中的可預測性往往較差。所以確保它以零狀態開始每一幀都很重要。我在TF Issue Board上看到一些評論,說明新的'dynamic_rnn'實現在每一幀自動初始化它的狀態爲零。但是,在我的情況下,我看到異常情況,並希望保證初始化作爲圖的一部分。 – Hephaestus